Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 4D NumPy阵列中每个2D矩阵的最大值_Python_Arrays_Numpy - Fatal编程技术网

Python 4D NumPy阵列中每个2D矩阵的最大值

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(

我有一个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([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 ])