matlab - 当一维未知时在循环之前定义一个矩阵

标签 matlab loops variables matrix

我想在循环中为矩阵分配一些值,但我不知道有多少。 B 是一个向量,它是根据循环内的数据集 Data(i,:) 计算的。 B 中的元素数量在循环内是固定的,但事先未知。

就像;

A = zeros(n,m) %// I know n but I do not know m
for i = 1 : n
    % some code to calculate B from Data(i,:)
    A(i,:) = B;
end

B 是一个向量,但我不知道循环之前的 length(B) 所以我不能将它分配给 m.
当我初始化 A = []; 时,Matlab 发出警告

A appears to change size in every loop iteration.

最佳答案

如果 B 具有固定长度,一种替代方法是:

A = zeros(n,[]);
for ii = 1:n
   A(ii,1:numel(B)) = B;
end

这样您将预先分配行数,并且在第一次迭代后,列数将固定为 numel(B)

那么,为什么 A(ii,1:numel(B)) = B 有效而 A(ii,:) = B 无效?

当您执行 A(ii,:) = B 时,您试图将向量 B 放在行号 iiA。为此,AB 中的列数必须相等。您可以将其视为:

A(ii,:) = B

等于

A(ii,1:end) = B(1:end); 

如果您从一个空数组 A 开始,或者一个包含 n 行但零列的数组,则两个 end 将不相等,您将尺寸不匹配。

但是,如果您执行 A(ii,1:numel(B)) = B,您明确表示您正在尝试将向量 BA 中行号 ii 的第 1 到 m 列中。现在,由于 B 的列多于 A,MATLAB 将自动用零填充剩余的矩阵。

您可以自己尝试一些。不要复制粘贴,一个接一个地尝试,这样您就可以看到 A 在每一行之后是如何变化的。希望这能解决问题!

A = []
A(2,1) = 3
A(1,3) = 2
A(3,:) = [5 6 7]
A(:,6) = [1; 2; 3]
A(3,:)
A(3,1:end)
A(:,3)
A(1:end,3)

关于matlab - 当一维未知时在循环之前定义一个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26472155/

相关文章:

loops - 在 jekyll 静态站点中使用 Liquid 显示对象的 START 和 END 范围

javascript - 使用另一个变量值设置变量名称 - Javascript

Javascript 硬编码变量

matlab - 如何使用 Matlab 高效计算矩阵项

matlab - 通过 RGB 值获取像素坐标 matlab

c - 指针内存中的最后一个值不正确

javascript - HTML5 地理定位当前 GPS 位置的纬度和经度坐标放入变量中

matlab - MATLAB 中结构多级索引的矢量化

matlab - 在matlab中将GML文件转换为邻接矩阵

javascript - forEach 循环,堆栈类