在 Matlab 中生成 3D 数组

Grow 3D array in Matlab

有没有办法在 Matlab 的循环中使用 end 索引在三维中增长三维数组?

在二维中可以像

那样完成
a = [];
for x = y
   a(end + 1, :) = f(x);
end

但在 3D 中,同样的事情将不起作用,因为 a(1,1,end) 将尝试索引 a(1,1,1) 第一次迭代(而不是人们可能期望的 a(1,1,0))。所以我做不到

im = [];
for x = y
   im(:, :, end + 1) = g(x);
end

似乎在三维中 aend 的处理方式与前两个略有不同:

>> a = [];
>> a(end,end,end) = 1
Attempted to access a(0,0,1); index must be a positive integer or logical.

我是否遗漏了一些关于 end 索引如何工作的信息?

你在问什么...

如果您知道 g(x) 的大小,请将 im 初始化为一个空的 3d 数组:

im = zeros(n, m, 0);   %instead of im = [];

我认为你的代码现在应该可以工作了。

更好的方法...

另请注意,每次迭代调整数组大小代价高昂!如果数组很小,这并不重要,但对于巨大的矩阵,可能会对性能造成很大影响。

我会初始化为:

im = zeros(n, m, length(y));

然后适当索引。例如:

i = 1;
for x = y
   im(:, :, i) = g(x);
   i = i + 1;
end

这样您就不会在每次调整大小时分配新内存并复制整个整个矩阵im