簡體   English   中英

在Matlab中增長3D陣列

[英]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

看來enda在第三維度比前兩個處理方式稍有不同:

>> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM