【问题标题】: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 时,一切都搞砸了。

【问题讨论】:

    标签: matlab matrix minimum


    【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 2013-05-03
        • 2012-02-09
        • 1970-01-01
        • 2014-08-02
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        • 2023-01-11
        • 2015-05-05
        相关资源
        最近更新 更多