在Python中从2D数组中选择某些正值
我想从相同的数组中选择x,y值,例如:在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]:
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()
。