找出四个矩阵中对应元素的最小值

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语言编程:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。

最小面积子矩阵

最小面积子矩阵

1965: 求矩阵中最小元素及其位置

matlab如何不用max和min找出矩阵内的最大值和最小值

java数组算法例题(冒泡排序,选择排序,找最大值最小值,添加删除元素等)