Python 4D NumPy阵列中每个2D矩阵的最大值
我有一个4D阵列,定义如下:Python 4D NumPy阵列中每个2D矩阵的最大值,python,arrays,numpy,Python,Arrays,Numpy,我有一个4D阵列,定义如下: B = np.array( [[[[0.5000, 0.5625], [0.5000, 0.5625]], [[1.2500, 0.5000], [0.5625, 0.6875]], [[0.5625, 0.6250], [0.5000, 0.5625]]]] ) 我想取每个2D矩阵的最大值,以便得到以下结果: array([0.5625, 1.250, 0.6250]) array(
B = np.array(
[[[[0.5000, 0.5625],
[0.5000, 0.5625]],
[[1.2500, 0.5000],
[0.5625, 0.6875]],
[[0.5625, 0.6250],
[0.5000, 0.5625]]]]
)
我想取每个2D矩阵的最大值,以便得到以下结果:
array([0.5625, 1.250, 0.6250])
array([0.5000, 0.5000, 0.5000])
类似地,我想取每个2D矩阵的最小值,这样我可以得到以下结果:
array([0.5625, 1.250, 0.6250])
array([0.5000, 0.5000, 0.5000])
但是,当执行np.max(B,轴=0)
,np.max(B,轴=1)
,np.max(B,轴=2)
或np.max(B,轴=3)
时,这些都不能给出正确答案。是否需要指定另一个参数来执行此操作
正确的解决方案不应使用任何循环,最好只使用一个函数调用。您可以将其重塑为所需子阵列的2d阵列,然后在每个子阵列上应用max或min函数:
>>> B.reshape(3, 4)
array([[0.5 , 0.5625, 0.5 , 0.5625],
[1.25 , 0.5 , 0.5625, 0.6875],
[0.5625, 0.625 , 0.5 , 0.5625]])
>>> B.reshape(3, 4).max(axis=1)
array([0.5625, 1.25 , 0.625 ])
>>> B.reshape(3, 4).min(axis=1)
array([0.5, 0.5, 0.5])
我认为这个问题是对
axis
参数如何工作的误解。对于大多数这些聚合方法,axis
关键字是要投影的轴,即这些轴从结果中“删除”。因此,在这种情况下,您需要调用类似以下内容:
In [7]: B.max((0, 2, 3))
Out[7]: array([0.5625, 1.25 , 0.625 ])
对于min
In [8]: B.min((0, 2, 3))
Out[8]: array([0.5, 0.5, 0.5])
或者您可以直接调用numpy
方法
In [9]: np.max(B, axis=(0, 2, 3))
Out[9]: array([0.5625, 1.25 , 0.625 ])