删除满足2个条件的2D numpy数组中的元组

时间:2015-09-04 13:34:33

标签: python arrays numpy

所以我有一个numpy数组的元组,我想删除第一个值小于0或第二个元素大于数字的所有元组,n。 所以如果n = 10并且我们有这个数组:

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

它会变成这样:

[[]]

我猜我需要以聪明的方式使用np.deletenp.where

提前致谢。

2 个答案:

答案 0 :(得分: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中的表达式来表达您的情况。

答案 1 :(得分: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]])