【问题标题】:Selecting positive certain values from a 2D array in Python从 Python 中的二维数组中选择正的某些值
【发布时间】:2016-11-28 15:34:07
【问题描述】:

我想从一个相同的数组中选择 x、y 值,例如:

xy = [[0.0, 3], [0.1, 1], [0.2, -1]]

其中y > 0,所以输出应该是

array[ [0.0, 3], [0.1, 1]]

我尝试了类似的东西

[x for x in xy if y>0]

,但它返回以下错误:

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。

【问题讨论】:

  • 你不是说>= 0吗?
  • @Simon :我想您的问题已经解决,请标记已接受的答案。 :)

标签: python arrays numpy


【解决方案1】:

切片对象以仅比较 y 值并使用生成的布尔掩码:

In [12]:
xy[xy[:,1]>0]

Out[12]:
array([[ 0. ,  3. ],
       [ 0.1,  1. ]])

这里xy[:,1] 只为您提供y 值:

In [13]:
xy[:,1]

Out[13]:
array([ 3.,  1., -1.])

这是生成的布尔掩码:

In [14]:
xy[:,1] > 0

Out[14]:
array([ True,  True, False], dtype=bool)

【讨论】:

    【解决方案2】:

    试试这个:

    ans = [i for i in xy if i[1] > 0]
    

    输出:

    [[0.0, 3], [0.1, 1]]
    

    【讨论】:

    • [[x, y] for x, y in xy if y > 0]
    • 谢谢,这可行,但给我留下了一个数组列表。
    • 您的预期输出是什么? @西蒙
    • 最后,我想使用 fit_curve 拟合 y 值,所以在我使用 [:,0] 和 [:,1] 将二维数组转换为一维数组 x 和 y 之前
    • 如果你想要一个列表,你可以这样做:numpy.array(ans).flatten()
    【解决方案3】:

    使用itertools.compress的另一种方法:

    from itertools import compress
    
    xy = [[0.0, 3], [0.1, 1], [0.2, -1]]
    res = compress(xy, [item[1] > 0 for item in xy])
    

    输出:

    >>> list(res)
    [[0.0, 3], [0.1, 1]]
    

    【讨论】:

      【解决方案4】:

      试试这个:

      [x for x in xy if x[1]>0]
      

      【讨论】:

      • 这个答案和贾维斯的答案一样
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      相关资源
      最近更新 更多