2017-04-19 29 views
0

這把一個m×n矩陣成不同尺寸的1xM電池的問題是:MATLAB - 使用mat2cell內

我有一個矩陣MxN的大小,我希望把它分成大小1xM的細胞,但各行單元格的M包含大小爲1xNi的數組(這意味着數組具有不同的大小)。

我想使用mat2cell函數來做到這一點,但我想避免使用循環,我不知道該怎麼做。

我會試着用一個例子來解釋我的問題。假設我有一個矩陣

X = [1,4,6,9; 2,3,6,7; 5,9,8,7; 9,8,7,10] 

我想代碼做的就是把值每行的X<=6並把它們放在一個1xM細胞。所以答案應該是:

ans = 


C{1} = [1,4,6] 
C{2} = [2,3,6] 
C{3} = [5] 
C{4} = [] 

到目前爲止,我已經創建了一個循環穿過矩陣的所有行找到滿足條件的元素:

for i = 1:Mrows 
    C{i} = X(i,X(i,:)<=6,:); 
end 

這給我的結果,我但是當矩陣的大小非常大時,需要花費太多時間。

回答

0

可以使用num2cell(A,2)到每一行轉換成一個單元格,然後應用cellfun刪除值小於6:

X = [1,4,6,9; 2,3,6,7; 5,9,8,7; 9,8,7,10]; 
C = num2cell(X,2); 
res = cellfun(@(x) x(x<=6),C,'UniformOutput',0); 

,你會得到:

{ 
[1,4,6]; 
[2,3,6]; 
[5]; 
[] 
} 
+0

我試過了,它的功能非常完美!比我寫的簡單!謝謝 :)。 –

0

你可能會考慮預先分配存儲,即在開始填充之前創建一個空的C單元陣列:

X = [1,4,6,9; 2,3,6,7; 5,9,8,7; 9,8,7,10]; 
Mrows = numel(X(:,1)); 

C = cell(Mrows,1); %preallocate memory 

for i = 1:Mrows 
    C{i} = X(i,X(i,:)<=6,:); 
end