[英]Grow 3D array in Matlab
有沒有一種方法可以在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
的a
在第三維度比前兩個處理方式稍有不同:
>> 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
!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.