我有一个矩阵,如下所示:
A=[2 4;1 3;8 6;5 1;4 9]
现在我需要将矩阵A提取为两部分:
newpoint=[2 4];
rest=[1 3;8 6;5 1;4 9];
然后再次应用循环以将第二列提取为新点:
newpoint=[1 3];
rest=[2 4;8 6;5 1;4 9];
再次应用循环将第三列编号作为新点:
newpoint=[8 6];
rest=[2 4;1 3;5 1;4 9];
获取行序列中的数字,直到最后一行。有人可以帮助。谢谢〜
答案 0 :(得分:2)
您说要提取列,但提供了行示例。我继续前进,假设你的意思是行。
你可以用for循环来做。
A = [2 4; 1 3; 8 6; 5 1; 4 9];
for idx = 1:size(A, 1)
newpoint = A(idx, :);
rest = A; % Copy A to rest
rest(idx, :) = []; % Remove newpoint line
% do stuff
end
前两次迭代的结果:
newpoint =
2 4
rest =
1 3
8 6
5 1
4 9
newpoint =
1 3
rest =
2 4
8 6
5 1
4 9
如果您的A
矩阵很大,这不是一个好方法。
编辑:实际上,请勿使用此方法。 George Aprilis计时,并发现了100000x2矩阵的123秒。我想我的电脑要慢得多。花了216秒。我再说一遍,不要用这个。
答案 1 :(得分:2)
除了HebeleHododo的回答,如果你有大矩阵,也许你可以试试这个:
A = [2 4; 1 3; 8 6; 5 1; 4 9];
B = zeros(size(A,1)-1,size(A,2));
for idx = 1:size(A, 1)
newpoint = A(idx, :);
B(1:idx-1,:) = A(1:idx-1,:);
B(idx:end,:) = A(idx+1:end,:);
% do stuff
end
它没有摆脱for
循环,但临时B矩阵是预先分配的,A和B之间的副本是明确的,这使得它更快。
对于A = rand(100000,2);
,HebeleHododo的方法在我的电脑中需要大约123秒
上面的那个需要大约85秒。
修改 仅供参考,使用Intel Core i5-3450 CPU @ 3.10GHz
和Matlab R2011b