在 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
似乎在三维中 a
的 end
的处理方式与前两个略有不同:
>> 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
!
有没有办法在 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
似乎在三维中 a
的 end
的处理方式与前两个略有不同:
>> 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
!