加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:10:59 所属栏目:Python 来源:网络整理
导读:我有一个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.
我有一个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)

上面的代码从列表中删除了相应的条目,但如果删除x1,y1仍然保留在列表中.我想要实现的是,如果删除x1,也应该删除y1.我该怎么做呢?我的最终目标是尝试绘制x和y,因此我无法做到这一点,因为列表最终会有不同的维度.我也可以用

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

得到一个像([[[x1,y1],[x2,y2],[x3,y3],…]]这样的数组,但我不知道如何使用if条件从中删除条目.

谢谢.

解决方法

形成一个布尔选择掩码:

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

然后,从掩码为True的x和y中选择值:

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

当x是NumPy数组时,(x> 40)返回与x相同形状的布尔数组,其中x为x的元素大于40.

注意使用| for bitwise-和~for not(boolean negation).

或者,到De Morgan’s law,您可以使用

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

NumPy操作是按元素执行的.因此,如果x的元素在-40和40之间,并且y的相应元素在-20和20之间,则mask为True.

例如,

import numpy as np
x = [-50,-50,30,50]
y = [-30,10,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[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],dtype=bool)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读