在Python中从2D数组中选择某些正值

在Python中从2D数组中选择某些正值,python,arrays,numpy,Python,Arrays,Numpy,我想从相同的数组中选择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() 切片对象以仅比较y值,并使用生成的布尔掩码: In [12]: xy[xy[:,1]>0] Out[12]:

我想从相同的数组中选择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()


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

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

Out[12]:
array([[ 0. ,  3. ],
       [ 0.1,  1. ]])
In [14]:
xy[:,1] > 0

Out[14]:
array([ True,  True, False], dtype=bool)
这里
xy[:,1]
只提供
y
值:

In [13]:
xy[:,1]

Out[13]:
array([ 3.,  1., -1.])
以下是生成的布尔掩码:

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

Out[12]:
array([[ 0. ,  3. ],
       [ 0.1,  1. ]])
In [14]:
xy[:,1] > 0

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

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

[[0.0, 3], [0.1, 1]]
试试这个:

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

另一种使用
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]]

你是说
=0
?@Simon:我想你的问题已经解决了,请把答案标记为接受。:)此答案与Jarvis的答案相同,如果y>0,则xy中x,y的答案为[x,y]
谢谢,这很有效,但留给我一个数组列表。您预期的输出是什么@SimonIn最后,我想使用fit_曲线拟合y值,因此在我使用[:,0]和[:,1]将2D数组转换为1D数组x和y之前,如果需要单个列表,可以执行以下操作:
numpy.array(ans).flatte()