有没有办法在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.
索引在此处的工作原理?
答案 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
!