计算三个矩阵的最大值和最小值

时间:2018-12-20 14:00:46

标签: python python-3.x numpy max min

我有三个矩阵,我想计算R1的最小值和最大值以及Ex1和Ex2的第一列。我将最小值保存在Il中,将最大值保存在Ih中。当我评估最大值时,矩阵Il更改为Ih,不知道为什么。同样,最大值的计算实际上并不是最大值。下面给出了代码以及观察到的和预期的输出。人们会期望第一和第三打印语句提供相同的输出,但事实并非如此。

import numpy as np

Rl = np.matrix([[70,15,10,15,65]]).transpose()
Ex1 = np.matrix([[20,10,40,2,40] ,[ 55,22,50,10,60], 
[80,40,75,25,80]]).transpose()
Ex2 = np.matrix([[30,20,30,10,50],[50,30,50,20,60], 
[60,40,70,30,70]]).transpose()
Il = np.minimum(Rl[:,0],Ex1[:,0],Ex2[:,0])
print("Il =\n {}\n".format(Il))
Ih = np.maximum(Rl[:,0],Ex1[:,0],Ex2[:,0])
print("Ih =\n {}\n".format(Ih))
print("Il =\n {}\n".format(Il))

实际结果

Il =
 [[20]
 [10]
 [10]
 [ 2]
 [40]]

Ih =
 [[70]
 [15]
 [40]
 [15]
 [65]]

Il =
 [[70]
 [15]
 [40]
 [15]
 [65]]

预期结果

Il =
 [[20]
 [10]
 [10]
 [ 2]
 [40]]

Ih =
 [[70]
 [20]
 [40]
 [15]
 [65]]

Il =
 [[20]
 [10]
 [10]
 [ 2]
 [40]]

2 个答案:

答案 0 :(得分:2)

Numpy的.minimum().maximum()不能用于两个以上的数组。该第三个参数被解释为输出数组,因此您将覆盖Ex2并每次打印其修改后的内容。

答案 1 :(得分:0)

由于np.minimum()np.maximum()一次只比较2个数组,因此您可以嵌套它们以比较3个数组。例如:

import numpy as np

a = np.matrix([[70,15,10,15,65]]).transpose()
b = np.matrix([[20,10,40,2,40],[55,22,50,10,60],[80,40,75,25,80]]).transpose()
c = np.matrix([[30,20,30,10,50],[50,30,50,20,60],[60,40,70,30,70]]).transpose()

abc_min = np.minimum(np.minimum(a[:,0], b[:,0]), c[:,0])
abc_max = np.maximum(np.maximum(a[:,0], b[:,0]), c[:,0])

print("abc_min =\n {}\n".format(abc_min))
print("abc_max =\n {}\n".format(abc_max))
# OUTPUT
# abc_min =
#  [[20]
#  [10]
#  [10]
#  [ 2]
#  [40]]
# 
# abc_max =
#  [[70]
#  [20]
#  [40]
#  [15]
#  [65]]