这是问题所在:
我有一个MxN
大小的矩阵,我想把它分成一个大小为1xM
的单元格,但是单元格的每一行M
都包含一个大小为{{1}的数组}(这意味着数组的大小不同)。
我正在尝试使用mat2cell函数,但我想避免使用循环,我不知道该怎么做。
我将尝试用一个例子来解释我的问题。假设我有一个矩阵
1xNi
我希望代码执行的操作是获取每行的值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} = []
这给了我想要的结果,但是当矩阵的大小非常大时,需要花费太多时间。
答案 0 :(得分: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];
[]
}
答案 1 :(得分: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