gpt4 book ai didi

matlab - 初始化 3D 矩阵并添加新数据

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:00 24 4
gpt4 key购买 nike

这里是我的示例代码:

aaa = [];
bbb = [];
for ii = 1:10
[aaa(:,:,end+1), bbb(:,end+1)] = myfunction();
end

函数myfunction:

function [aaa, bbb] = myfunction()
aaa = rand(5,3);
bbb = rand(5,1);
end

我知道我可以使用 ii 将变量的输出发送到 aaabbb,例如 [aaa(:, :,ii), bbb(:,ii)] = myfunction()。我只是想知道为什么 aaa 我生成一个 5x3x11 矩阵(不应该是 5x3x10 吗?)?对于 bbb,它正确地生成了一个 5x10 矩阵。因此,为什么 end + 1 适用于 bbb 而不是 aaa

最佳答案

我相信这与 MATLAB 定义空矩阵的方式有关。如果您执行 size(aaa),MATLAB 将返回 0 0,如您所料。 size(bbb) 返回相同的值。但是,如果您明确尝试使用 size(aaa,3) 查找第 3 维的大小,MATLAB 将返回 1。因此,似乎 MATLAB 将空矩阵定义为前两个维度的大小为零,所有其他维度的大小为 1。

这意味着当您执行 a(:,:,end+1) 时,您实际上访问的是 a(:,:,2),因为 a 的第 3 个维度的末尾是 1,即使它是空的。 b 没有这个问题,因为它只是二维的,空矩阵的第二个维度的末尾为零。

编辑:顺便说一句,如果您要在循环中为矩阵赋值,您应该始终预先分配它们(我相信 MATLAB 会提示这一点)。否则,每次循环迭代都必须调整矩阵的大小,通常会导致执行时间变慢。

关于matlab - 初始化 3D 矩阵并添加新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21147079/

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