2013-03-05 115 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秒。我再說一遍,不要使用這個。