找出四个矩阵中对应元素的最小值
Posted
技术标签:
【中文标题】找出四个矩阵中对应元素的最小值【英文标题】:Finding the minimum of corresponding elements in four matrices 【发布时间】:2015-01-09 18:45:12 【问题描述】:所以我需要在多个矩阵中找到对应元素的最小值。我确实找到了this page,但我想进一步扩展我的问题。我的矩阵有正负值(和零),我想找到不包括零的最小值。
例子:
Z(:,:,1) = [-5 0 5
0 0 0
1 0 3];
Z(:,:,2) = [1 0 2
0 0 0
0 0 0];
Z(:,:,3) = [0 0 0
-9 0 4
0 0 0];
Z(:,:,4) = [0 0 0
-2 0 0
0 0 0];
这是我现在使用的:
Zmin = min(Z,[],3);
但这给了我:
[-5 0 0
-9 0 0
0 0 0]
但我希望我的结果是:
[-5 0 2
-9 0 4
1 0 3]
有什么想法吗?当我使用nonzeros
时,一切都搞砸了。
【问题讨论】:
【参考方案1】:这里有一个解决方法:
将 Z 中的所有 0 替换为 NaN,计算最小值,然后切换回 0:
clear all
clc
close all
Z(:,:,1) = [-5 0 5
0 0 0
1 0 3];
Z(:,:,2) = [1 0 2
0 0 0
0 0 0];
Z(:,:,3) = [0 0 0
-9 0 4
0 0 0];
Z(:,:,4) = [0 0 0
-2 0 0
0 0 0];
%// Assign NaN to 0 elements
Z(Z ==0) = NaN;
Zmin = min(Z,[],3);
%// Switch back with 0
Zmin(isnan(Zmin)) = 0;
%// Same for Z;
Z(isnan(Z)) =0;
输出如下所示:
Zmin
Z
Zmin =
-5 0 2
-9 0 4
1 0 3
Z(:,:,1) =
-5 0 5
0 0 0
1 0 3
Z(:,:,2) =
1 0 2
0 0 0
0 0 0
Z(:,:,3) =
0 0 0
-9 0 4
0 0 0
Z(:,:,4) =
0 0 0
-2 0 0
0 0 0
【讨论】:
【参考方案2】:一种选择是将所有零元素设置为NaN
:
Z(Z==0)=NaN;
然后使用nanmean
Zmin = nanmin(Z,[],3);
【讨论】:
以上是关于找出四个矩阵中对应元素的最小值的主要内容,如果未能解决你的问题,请参考以下文章
C语言编程:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。