在Matlab中增长3D数组

时间:2015-12-08 06:56:12

标签: arrays matlab matrix-indexing

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

在2D中可以像

那样完成
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

似乎第三维中end的{​​{1}}处理方式与前两个方面略有不同:

a

我是否遗漏了>> a = []; >> a(end,end,end) = 1 Attempted to access a(0,0,1); index must be a positive integer or logical. 索引在此处的工作原理?

1 个答案:

答案 0 :(得分:3)

你要问的是什么......

如果您知道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