2010-04-14 610 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))找出最大值。

相关问题