2010-04-14 616 views
10

我有一個4D的測量數組在MATLAB中。每個維度表示測量的不同參數。我想找到每個的最大值和最小值以及索引(即哪個參數)。如何在MATLAB中找到多維矩陣的最大值或最小值?

這樣做的最佳方法是什麼?我想我可以在每個維度中取最大值的最大值,但這看起來像是一個混合物。

+0

雖然明確的問題是在被標記的僞裝中回答的,但這裏的所有答案都回答了標題中的問題。這是兩種截然不同的情況,我不同意重複的標誌。 – excaza 2016-02-10 19:38:21

回答

34

簡單的例子:

%# random 4 d array with different size in each dim 
A = rand([3,3,3,5]); 

%# finds the max of A and its position, when A is viewed as a 1D array 
[max_val, position] = max(A(:)); 

%#transform the index in the 1D view to 4 indices, given the size of A 
[i,j,k,l] = ind2sub(size(A),position); 

中尋找最小留下作爲一個練習:)。

以下評論: 如果你不知道你的數組A的維數,因此不能寫「​​」的一部分,用這一招:

indices = cell(1,length(size(A))); 

[indices{:}] = ind2sub(size(A),position); 
+0

這是Matlab的方式。如果您想查找絕對最大值,請使用'max(abs(A(:))'並乘以'sign(A(位置))'以防您對該符號感興趣。 – Jonas 2010-04-14 11:53:18

+0

很好的解決方案沒有任何循環的Matlab方法 – martiert 2010-04-14 12:39:42

+0

如果你不知道A的尺寸,你能得到一個最大位置索引嗎?例如在一個函數中。 – yuk 2010-04-14 14:24:46

0

爲二維數組,說我 您可以使用兩次最小/最大功能。對於n維數組,n次n。 如:a=[2 3 4; 5 6 7; -2 7 87; 911 7 34];

for minimum: min(min(a,[],1)) 
      -> the answer will be -2. 

你可以把最小/最大尺寸參數,以2爲好。因爲這是調用函數兩次,第二次選擇維度u的最小/最大元素向量。

同樣,你可以做(max(max(a,[],1))找出最大值。

相關問題