将向量存储到元胞数组中

Storing vectors into a cell array

我有一个名为 R 的 128x100 矩阵。

我还有一个 1x100 的矩阵,叫做 I。 向量 I 中的值范围为 1-64。

例如我:[13,22,55,63 ... ,35]

R和I的元素一一对应

我想知道 I 的每个唯一值,即如果 1 出现在向量 I 中的六个位置(第 12、20、35、62、87、95 列),如何连接相应的(第 # 列) R 中的 12、20、35、62、87、95) 列,并将信息存储在单个单元格数组 S 中,用于 1-64 中的所有此类值。

我试过了,但想不出紧凑而正确的代码。

for j = 1:64
   for i = 1:100
       if I(i) == j
           S{j} = R(:,i);
       end      
   end    
end

这就是你想要的:

S = arrayfun(@(n) R(:,I==n), 1:64, 'UniformOutput', false);

或者,使用等效循环:

S = cell(1,64);
for n = 1:64
  S{n} = R(:,I==n);
end

使用accumarray的解决方案:

S = accumarray(I(:),1:100,[64 1],@(x){R(:,x)});

如果数组 I 不包含 1:64 的所有值 S 将具有可以通过这种方式删除的空单元格:

S(cellfun(@isempty,S))=[];

*感谢@LuisMendo 提出改进答案的建议。