2017-07-01 50 views
-1

我有一個單元陣列D {7,x}有7行x列(直到現在還不知道)。Matlab:刪除單元陣列元素(數據準備)

  • 在4行有索引編號1和2。

  • 在5行有索引字母A和B.

  • 在6行有索引-1和1。

  • 在第7行有時間。

現在我想從這個數組中刪除無效數據:

如果在4排1;和第5行中的A;和第6行中的1,那麼該列應該被刪除。如果:

爲1,B,-1和2,A,-1和2,B,1(總是當此三重一起出現在一列)

和行7中組合相同的原理值爲< 0.2或> 2(也是整列無效)。

這樣做的最好方法是什麼? 我想到了D的長度的循環,但我不知道如何刪除組合出現的列,我根本不知道如何有效地執行它。

會真的感謝您的想法!

+1

顯示迄今爲止您嘗試過的內容總是一個好主意,即包含for循環方法,並避免一次詢問多個問題,即高效實現和刪除列。它將會提供更好的可重用的問題和答案。 – m7913d

回答

2

對於循環是一個解決方案。請謹慎使用,當您使用作爲循環來刪除內容時,就是從循環開始。我使用你的第一個標準,因爲在這個答案的例子:

for i = size(D,2):-1:1 
    if D{4,i}==1 && strcmp(D{5,i}, 'A') && D{6,i}==1 % use {} 
     D(:,i) = []; 
    end 
end 

爲了避免循環,你可能需要cell2mat,或[d {4},:],數字列:

ind = [D{4,:}]==1 & strcmp(D(5,:), 'A') & [D{6,:}]==1; % or 
% ind = cell2mat(D(4,:))==1 & strcmp(D(5,:), 'A') & cell2mat(D(6,:))==1; 
D(:, ind) = []; 
+0

非常感謝!我認爲這似乎工作。情況總是如此,當我刪除某些東西時,我必須在最後開始一個循環? 所以現在我可以在循環中添加其他if語句或者創建4個或5個獨立的ind變量,對吧?對於最後的情況,這將是這樣的: ind4 = [D {7,:}] <0.2 | [D {7,:}]> 2; D(:, ind4)= []; ?? – LotteLi

+0

@LotteLi你懂了!從最後刪除是一個簡單的解決方案。如果從頭開始循環,則需要創建要刪除的索引,並在循環外刪除它們。 –