所以我需要找到多个矩阵中相应元素的最小值。我找到了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
时,它会弄乱一切。
答案 0 :(得分:1)
这是一个解决方法:
用NaN替换Z中的所有0,计算min,然后切换回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
答案 1 :(得分:0)
一种选择是将所有零元素设置为NaN
:
Z(Z==0)=NaN;
然后使用nanmean
Zmin = nanmin(Z,[],3);