gpt4 book ai didi

python - 以并行方式从数组中删除条目

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:38 25 4
gpt4 key购买 nike

我有一个 x 和 y 坐标的列表/数组,例如:

x = [x1, x2, x3,...]
y = [y1, y2, y3,...]

现在,我想根据条件删除某些条目,例如:

for i in x:
if i <= 40 and i >= -40:
print "True"
else:
x.remove(i)

for i in y:
if i <= 20 and i >=- 20:
print "True"
else:
y.remove(i)

上面的代码从列表中删除了相应的条目,但是如果删除了 x1y1 仍然保留在列表中。我想要实现的是,如果 x1 被删除,y1 也应该被删除。我该怎么做呢?我的最终目标是尝试绘制 xy,因此我无法执行此操作,因为列表最终具有不同的维度。我也可以用

zeta_list = np.column_stack((x, y))

得到像([[x1, y1], [x2, y2], [x3, y3],...]])这样的数组,但我不确定如何删除使用 if 条件的条目。

谢谢。

最佳答案

形成一个 bool 选择掩码:

mask = ~((x > 40) | (x < -40) | (y > 20) | (y < -20))

然后,从 xy 中选择值,其中 mask 为 True:

x, y = x[mask], y[mask]

x 是一个 NumPy 数组时,(x > 40) 返回一个与 x 形状相同的 bool 数组,即 True 其中 x 的元素大于 40。

请注意 | 用于按位或,~ 用于( bool 否定)。


或者,通过 De Morgan's law , 你可以使用

mask = ((x <= 40) & (x >= -40) & (y <= 20) & (y >= -20))

NumPy 操作按元素执行。因此,只要 x 的元素在 -40 和 40 之间,mask 就是 True,y 的相应元素 是在 -20 到 20 之间。


例如,

import numpy as np
x = [-50, -50, 30, 0, 50]
y = [-30, 0, 10, 30, 40]

# change the lists to NumPy arrays
x, y = np.asarray(x), np.asarray(y)
# mask = ~((x > 40) | (x < -40) | (y > 20) | (y < -20))
mask = ((x <= 40) & (x >= -40) & (y <= 20) & (y >= -20))
x, y = x[mask], y[mask]

产量

In [35]: x
Out[35]: array([30])

In [36]: y
Out[36]: array([10])

In [37]: mask
Out[37]: array([False, False, True, False, False], dtype=bool)

关于python - 以并行方式从数组中删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com