Matlab 求四个矩阵中对应元素的最小值

Matlab 求四个矩阵中对应元素的最小值,matlab,matrix,minimum,Matlab,Matrix,Minimum,所以我需要找到多重矩阵中对应元素的最小值。我确实找到了答案,但我想把我的问题再进一步。我的矩阵有正值和负值(以及零),我想找到排除零的最小值 例如: 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

所以我需要找到多重矩阵中对应元素的最小值。我确实找到了答案,但我想把我的问题再进一步。我的矩阵有正值和负值(以及零),我想找到排除零的最小值

例如:

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]

有什么想法吗?当我使用非零时,它会把一切都搞糟。

一个选项是将所有零元素设置为NaN:

Z(Z==0)=NaN;
然后使用
nanmean

Zmin = nanmin(Z,[],3);
这里有一个解决方法:

将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