簡體   English   中英

Matlab 中的 N 維數組索引:在中間找到數組

[英]N-dimensional array indexing in Matlab : find array in middle

我正在使用 N 維數組,但數組索引有問題。 我有一個任務是在中間的 N 維數組中找到一個 (N-1) 維數組。

讓我用 3D 數組詳細解釋。 A是一個 3 維數組,已拆分為多個組。 在每個組中,有b - 組中二維數組的數量。 我將其模擬為:

b=5;
A=rand(2,2,20);
groups = reshape(A, size(A,1), size(A,2),b, []);

groups是 4 維數組,第 4 維是組的數量(這里是 4)。

為了在每個組中找到一個中間人,我添加了以下循環:

for ii=1:size(groups,4)  % Loop over all groups/slices
     middle(:,:,ii) = groups(:,:,(w-1)/2+1,ii);  % 1 2 3 4 5 : the middle is 3
end

middle是一個 3 維數組,它收集每組中的中間數組。

正如您在我的示例中看到的,我使用了b=5 (奇數)。 我的問題是偶數b

我試圖將它實現為(重寫上面的循環);

l=rem(w,2);
 for ii=1:size(groups,4)  % Loop over all groups/slices
     if l==1
         middle(:,:,ii) = groups(:,:,(w-1)/2+1,ii);  
     else
         middle(:,:,ii) = groups(:,:,(w-1)/2,ii);  
     end
 end

但它不起作用。 Matlab 在l=rem(w,2);行中給了我一個錯誤l=rem(w,2); 你能告訴我如何修復它嗎? 有沒有另一種方法來實現它?

您應該使用floor of ceil將索引四舍五入到您想要的任何元素:

middle_index = floor((w-1)/2+1);

在這里,4 的中間是 2,使用ceil你會選擇索引 3。

接下來,您可以在單個索引操作中提取數組:

middle = groups(:,:,middle_index,:);

最后,使用squeezereshape來擺脫第三個索引:

middle = squeeze(middle);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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