首页 > 解决方案 > numpy 数组索引:在整个行/列上应用条件

问题描述

我有这个数组:

a=array([[0. , 0.3, 0.2],
       [0.5, 0. , 0.1]])

和这个自定义的 min 方法:

def custom_min(l_):
    return min([x for x in l_ if x>0])

如何将其应用于行以选择其中一些?例如,如果行 custom_min > 0.1,则应选择该行:即,

b = [[0. , 0.3, 0.2]]

为了清楚起见,我正在寻找这样的方法:

a[a[:,1] > 0.1]

标签: pythonarraysnumpy

解决方案


首先,您可以使用numpy.apply_along_axis应用于custom_min每一行。

我也会重写custom_min为更 numpythonic: return min(l_[l_ > 0])

现在您在向量中有自定义最小值,您可以再次使用逻辑索引:

row_mask = result > 0.3filtered_array = a[row_mask, :]

编辑:多思考一下如何让一切都只使用 numpy 矢量化函数。我们可以先用numpy.where无穷大替换小于 0 的所有值。这将其排除在最低限度之外:

row_wise_custom_mins = np.min(np.where(a > 0, a, np.inf), axis=1)

a如果条件为真,“where”选择值形式,如果np.inf条件为假,则选择。然后我们选择最小值(沿轴 1),就是这样。


推荐阅读