【问题标题】:Numpy: Filtering rows by multiple conditions?Numpy:按多个条件过滤行?
【发布时间】:2015-06-12 15:41:45
【问题描述】:

我有一个名为 meta 的二维 numpy 数组,有 3 列。我想要做的是:

  1. 检查前两列是否为零
  2. 检查第三列是否小于X
  3. 只返回符合条件的行

我做到了,但解决方案似乎很做作:

meta[ np.logical_and( np.all( meta[:,0:2] == [0,0],axis=1 ) , meta[:,2] < 20) ]

你能想出更清洁的方法吗?似乎很难同时拥有多个条件;(

谢谢


对不起,我第一次复制了错误的表达方式……已更正。

【问题讨论】:

  • 它如何与== 一起工作?你需要numpy.logical_and
  • 那行不通...当两种情况都为假时它会失败

标签: python numpy conditional-statements


【解决方案1】:

这个怎么样-

meta[meta[:,2]<X * np.all(meta[:,0:2]==0,1),:]

示例运行 -

In [89]: meta
Out[89]: 
array([[ 1,  2,  3,  4],
       [ 0,  0,  2,  0],
       [ 9,  0, 11, 12]])

In [90]: X
Out[90]: 4

In [91]: meta[meta[:,2]<X * np.all(meta[:,0:2]==0,1),:]
Out[91]: array([[0, 0, 2, 0]])

【讨论】:

    【解决方案2】:

    您可以在一个切片中使用多个过滤器,如下所示:

    x = np.arange(90.).reshape(30, 3)
    #set the first 10 rows of cols 1,2 to be zero
    x[0:10, 0:2] = 0.0
    x[(x[:,0] == 0.) & (x[:,1] == 0.) & (x[:,2] > 10)]
    #should give only a few rows
    array([[  0.,   0.,  11.],
           [  0.,   0.,  14.],
           [  0.,   0.,  17.],
           [  0.,   0.,  20.],
           [  0.,   0.,  23.],
           [  0.,   0.,  26.],
           [  0.,   0.,  29.]])
    

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2018-12-05
      • 1970-01-01
      • 2021-10-20
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多