2015-09-04 103 views
0

因此,我有一个numpy元组数组,我想删除第一个值小于0或第二个元素大于数字n的所有元组。
所以,如果n = 10,我们有这个数组:删除满足2个条件的2D numpy数组中的元组

[[-1, 5], [3, 11], [-4, 20]]

它将成为这样的:

[[]]

我猜我需要一个聪明的使用np.deletenp.where办法?

在此先感谢。

回答

1

你可以使用逻辑索引来解决这个问题。我猜你的榜样,你意味着

[[-1, 5], [3, 11], [-4, 20]] 

将成为

[] 

既然你说的条件是:

我想删除所有的元组第一个值小于0第二个元素是大于,n。

>>> import numpy as np 
>>> arr = np.array([[-1, 5], [3, 11], [-4, 20]]) 
>>> arr[~((arr[:,0] < 0) | (arr[:,1] > 10))] 
array([], shape=(0, 2), dtype=int64) 

基本上它的一切归因于表达自己的组合逻辑要求(通过|&)不同的逻辑口罩。

~取反面具,因为你说你想删除符合你的标准的元素。这种方法工作的一个更好的例子是:

>>> import numpy as np 
>>> arr = np.array([[-1, 5], [1, 1], [3, 11], [-4, 20], [2, 9]]) 
>>> arr[~((arr[:,0] < 0) | (arr[:,1] > 10))] 
array([[1, 1], [2, 9]]) 
1

您可以使用类似以下内容:

>>> import numpy as np 
>>> A = np.array([[-1, 5], [3, 11], [-4, 20]]) 
>>> mask = (A[:,0]>0) & (A[:,1] > 10) 
>>> A[mask] 
array([[ 3, 11]]) 

的想法是使用表达式,如mask来表达你的病情。

相关问题