【问题标题】:Max of each 2D matrix in 4D NumPy array4D NumPy 数组中每个 2D 矩阵的最大值
【发布时间】:2020-08-12 02:40:35
【问题描述】:

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

我想取每个二维矩阵的最大值,这样我得到的结果是:

array([0.5625, 1.250, 0.6250])

同样,我想取每个二维矩阵的最小值,这样我得到的结果是:

array([0.5000, 0.5000, 0.5000])

但是,在执行 np.max(B, axis=0)np.max(B, axis=1)np.max(B, axis=2)np.max(B, axis=3) 时,这些都没有给出正确的答案。我需要指定另一个参数来执行此操作吗?

正确的解决方案不应该使用任何循环,最好是一个函数调用。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    我认为这个问题是对axis 参数如何工作的误解。对于大多数这些聚合方法,axis 关键字是要投影的轴(或多个轴)along,即这些轴从结果中“删除”。所以在这种情况下,你想调用类似的东西:

    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 ])
    

    【讨论】:

      【解决方案2】:

      您可以将其重塑为所需子数组的二维数组,然后在每个子数组上应用您的 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])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 2022-01-15
        • 2013-06-30
        • 2022-01-09
        • 2017-07-24
        • 2017-10-13
        相关资源
        最近更新 更多