2013-03-05 134 views
0

我具有矩阵如下面的:提取序列矩阵元素?

A=[2 4;1 3;8 6;5 1;4 9] 

现在我需要矩阵A提取到2份:

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]; 

取行序列中的数字直到最后一行。有人可以提供足够的帮助。谢谢〜

回答

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.10GHzMatlab R2011b

完成
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秒。我再说一遍,不要使用这个。