[英]Find all local minima in an N-dimensional array in MATLAB/Octave
[英]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,:);
最后,使用squeeze
或reshape
來擺脫第三個索引:
middle = squeeze(middle);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.