MATLAB - 使用 mat2cell 将 MxN 矩阵划分为 1xM 大小不同的单元格

MATLAB - Using mat2cell to divide a MxN matrix into 1xM cell with different sizes within

这是问题所在:

我有一个大小为 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

这给了我想要的结果,但是当矩阵的大小非常大时特别需要花费太多时间。

您可以使用 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];
 []
}

您可以考虑预分配内存,即在开始填充之前创建一个空的 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