基于值选择数组元素的Pythonic方法?

2024-10-06 16:18:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种pythonic(单线)方法来从数组中提取一系列值 下面是一些示例代码,它们将从x,y数据中提取>;2和<;8数组元素,并将它们放入一个新数组中。有没有办法在一条线上完成这个任务?下面的代码工作,但似乎比它需要更笨拙。(请注意,我实际上正在处理应用程序中的浮动)

import numpy as np

x0 = np.array([0,3,9,8,3,4,5])
y0 = np.array([2,3,5,7,8,1,0])

x1 = x0[x0>2]
y1 = y0[x0>2]
x2 = x1[x1<8]
y2 = y1[x1<8]

print x2, y2

这个指纹

[3 3 4 5] [3 8 1 0]

问题的(b)部分是提取值,比如1 < x < 37 < x < 9,以及它们对应的y值。


Tags: 数据方法代码示例np数组pythonicarray
2条回答
import numpy as np

x0 = np.array([0,3,9,8,3,4,5])
y0 = np.array([2,3,5,7,8,1,0])
list( zip( *[(x,y) for x, y in zip(x0, y0) if 1<=x<=3 or 7<=x<=9] ) )

# [(3, 9, 8, 3), (3, 5, 7, 8)]

您可以使用&将布尔数组链接在一起,分别使用logical and|将布尔数组链接在一起,这样条件2 < x0x0 < 8就变为

mask = (2 < x0) & (x0 < 8)

例如

import numpy as np

x0 = np.array([0,3,9,8,3,4,5])
y0 = np.array([2,3,5,7,8,1,0])

mask = (2 < x0) & (x0 < 8)
x2 = x0[mask]
y2 = y0[mask]    
print(x2, y2)
# (array([3, 3, 4, 5]), array([3, 8, 1, 0]))

mask2 = ((1 < x0) & (x0 < 3)) | ((7 < x0) & (x0 < 9))    
x3 = x0[mask2]
y3 = y0[mask2]
print(x3, y3)
# (array([8]), array([7]))

相关问题 更多 >