2017-05-08 94 views
1

我有两个数组x=[1,2,3,4]y=[1,0,0,1],描述了2D点(x,y)。我想知道有多少元素有x>2y==1。什么是最简单的方法来做到这一点(没有任何循环)? 是否有可能做类似x[x>2],但有两种情况?2D空间中的Python过滤器点

回答

2

假设这些都是numpy的阵列,因为你x[x>2]是numpy的语法,你只需要和(&)操作:

meet_cond = (x > 2) & (y == 1) 
how_many = meet_cond.sum() 

which_x = x[meet_cond] 
which_y = y[meet_cond] 
+0

非常酷。显示'meet_cond'的外观可能很有趣。 –

0

如果xy属于一起为点,你可能要将其装入a np 2D阵列:

>>> import numpy as np 
>>> x = np.array([1, 2, 3, 4]) 
>>> y = np.array([1, 0, 0, 1]) 
>>> xy = np.array([x, y]).T 
>>> xy[(x > 2) & (y == 1)] 
array([[4, 1]]) 
>>> xy[(xy[:, 0] > 2) & (xy[:, 1] == 1)] 
array([[4, 1]]) 
>>> np.count_nonzero((xy[:, 0] > 2) & (xy[:, 1] == 1)) 
1