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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |