python - 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]
解决方案
首先,您可以使用numpy.apply_along_axis
应用于custom_min
每一行。
我也会重写custom_min
为更 numpythonic: return min(l_[l_ > 0])
。
现在您在向量中有自定义最小值,您可以再次使用逻辑索引:
row_mask = result > 0.3
和filtered_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),就是这样。
推荐阅读
- c# - 自定义 Windows 应用程序需要代码签名吗?
- r - 删除重复项时用于计数的 R 函数
- matlab - 在 Matlab 中具有矢量输入的 Black Scholes 函数
- javascript - 过滤掉 JavaScript 中的所有非字母数字字符
- coq - 用暗示代替假设而不添加其前提作为子目标
- c - 在第二条对角线下打印矩阵和数字
- node.js - 可以以某种方式减少/解决这些 npm 警告吗?
- angular - 如何在 ngx-bootstrap/datepicker 中设置选定的日期,该日期是在将图标单击到常见的 html 输入时启动的?
- swift - 引用实例方法需要等效性 (SWIFT)
- text - 用视觉模式选择多个文本点?