2017-06-29 117 views
0

我有一個包含許多單元格的單元格數組A,每個單元格有50個值。這些單元或者具有全零或者其他數字的組合。返回matlab中不包含全零的單元格數組中的單元格

我正在尋找一種方法來找出哪些單元格不具有全零,因爲我想在圖表中繪製這些單元格。如果我嘗試繪製單元陣列中的所有單元格,matlab處理的方式太多了。所以理想情況下,我會得到一個不是由全零組成的列表,例如A {1},A {53},A {235}等等。

在這裏查看時,我發現如何在數組或矩陣中找到非零值,但我沒有看到任何有關使用非零值查找單元格的內容。

非常感謝您的幫助!

回答

0

讓我們考慮示例數據

a=[{randi(10,1,50)} {randi(10,1,50)} {zeros(1,50)} {randi(10,1,50)}] 

然後你就可以找到那些不完全包含這樣的零細胞的指標:

nonzeroind=find(~cellfun(@(x) all(x==0),a)) 

如果存儲在單元格中的矩陣有多個非單實體維度,那麼無線將不得不申請all多次你有你的最高尺寸電池的尺寸是這樣的:

nonzeroind=find(~cellfun(@(x) all(all(x==0)),a)) 

存儲在單元矩陣的尺寸不同意這種做法無所謂。

+0

嗨,非常感謝您花時間幫助我。當我應用nonzeroind =〜cellfun(@(x)all(x == 0),a)時,我最終得到了全部爲零的單元格。我知道我的單元格數組有一些非零值的單元格,所以我不確定發生了什麼。你對我在這裏可能錯過的東西有任何想法嗎?非常感謝! – Anonymous

+0

@匿名,這很奇怪,因爲它適用於我的示例數據。你能否將你的變量保存在一個.mat文件中並將其上傳到你的問題中? 另請注意,我添加了'find'來將邏輯輸出轉換爲線性索引。 – Max

0

如果單元格包含100個單元格x 50行,爲什麼不把它轉換爲雙矩陣?因爲根據你的問題,看起來所有的值都是雙倍的,只是數字。

首先讓你的電池,雙:

m=zeros(size(a,1),size(a,2)); 
    m=str2double(a); 
% from https://www.mathworks.com/matlabcentral/answers/18509-cell-conversion-to-double 
%Then you can just convert 0's to NaN's and plot all freely 
    m(m==0) = NaN; 
相關問題