gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:58:29 26 4
gpt4 key购买 nike

我想在循环中为矩阵分配一些值,但我不知道有多少。 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com