2014-04-01 43 views
0

假設我有一個包含10個值的矩陣A.執行計算後從矩陣中刪除列

而且在不同的細胞中每個值的存在:

A = [A{1}, A{2}, A{3}, A{4}, A{5}, A{6}, A{7}, A{8}, A{9}, A{10} 

假設我申請一個奇怪虛構的功能,這個矩陣(strangef,請不要太擔心一下這個功能其實呢! )),其結束了給我10不相同的數值:

B = strangef(A); 
B(1,:) = [1.3, 4.2, 1.0, 2.3, 6.4, 0.9, 4.5, 2.6, 7.1, 3.1] 

然後我看找到B中的最小值:

c = find(B==min(min(B))) 

我覺得這是一個6號值,所以現在我要重建我的矩陣,使其排除這6值,如:

A = [A{1}, A{2}, A{3}, A{4}, A{5}, A{7}, A{8}, A{9}, A{10}] 

我可以使用如下的指標構建這個新的矩陣:

col = 10; %number of columns 
index = setdiff(1:col, c); 

然而而我可以使用C(列值)的環路我的新矩陣缺少一個值的第一次迭代,如果這個新的矩陣的最小值在此A {3}列值只有9列的新矩陣是2.

所以我實際上最終建立這個矩陣:

A = [A{1}, A{3}, A{4}, A{5}, A{7}, A{8}, A{9}, A{10}] 

,而不是這一個:

A = [A{1}, A{2}, A{4}, A{5}, A{7}, A{8}, A{9}, A{10}] 

下面是一些僞

excludingMinimums = []; 
col = 10; 

while col>1 
     index = setdiff(1:col,excludingMinimum) 
     for i = 1:col 
      A = [A{i}] 
     end 
     B = strangef(A) 
     c = find(B==min(min(B))) 
     excludingMinimums = [excludingMinimums, c] 
     col = col - 1; 
end 
+0

問題是,它是關於「奇怪的」 - 如果我們在每次運行該函數後將'NaNs'引入'A',那會是一個問題嗎?這會影響'B = strangef(A);'的結果,除了'B'中的對應元素也是'NaN'嗎?這會影響'B'中的其他值嗎? – Divakar

回答

1

如何這樣的事情,而不是:保持你的萎縮A.刪除的運行副本比與缺少的元素重建更容易。

while size(A,2)>1 
    B = strangef(A); 
    c = find(min(min(B))); 
    A(c) = []; % delete the element from A 
    excludingMinimums = [excludingMinimums c]; % save this vector for future output? 
end 

注意()標記爲刪除,即使A是細胞。

1

邏輯索引使得它更簡單比你想象:

B = strangef(A); 
A = A(:, B~=min(B)); 

我們可以保持同樣的其餘列的軌跡:

col = 1:size(A,2); 
while length(col)>1 
    B = strangef(A); 
    idx = (B == min(B)); 
    col = col(idx); 
    A = A(:, ~idx); 
end