在matlab中的每个单元格数组元素中循环

loop in each cell array element in matlab

我没有在 Matlab 中使用过元胞数组,有疑问。

我有 2 个元胞数组 cl。我希望 c 有 10 个维度 10 x 785 的矩阵。我想遍历 c.

中矩阵的每一行

例如,我想用另一个向量替换这些行中的每一行。我该怎么做?

这是我目前拥有的代码

k=10;
c={10};
l={10};
for v=1:10
  c{v}=rand(k,d);  
end
for a=1:10
    l{a}=zeros(k,1);
end
 for s=1 : 10
         for j=1:k
            l{s}=c{s,???}*xn';
         end
  end

在最后一个循环中,我尝试显示 cl 的哪个单元格。但是,如何访问 c{1} 的每一行?

单元格引用可用于任何需要使用完整矩阵的上下文中。因此,要获得矩阵 M 的第 j 行,您需要执行正常的 M(j,:)。要获取存储在元胞数组 c 中的矩阵的第 j 行,您可以执行 c{1}(j,:).

所以在你的情况下,l{s}(j,:) = c{s}(j,:)*xn';

请注意 c={10} 没有按照您的预期进行。您可以说 c=cell(1,10),也可以清除 c 并让它动态构建。

最后,由于每个矩阵的大小都相同,请考虑使用 3d 矩阵而不是元胞数组。它的性能会更好,语法会稍微紧凑一些,您正在执行的特定操作将映射到矩阵乘法:

l = zeros(k, 1, 10);
c = rand(k, d, 10);

% Refer to c(:, :, 1) to get the first matrix