将向量存储到元胞数组中
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 提出改进答案的建议。
我有一个名为 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 提出改进答案的建议。