因此,我有一个numpy元组数组,我想删除第一个值小于0或第二个元素大于数字n的所有元组。
所以,如果n = 10,我们有这个数组:删除满足2个条件的2D numpy数组中的元组
[[-1, 5], [3, 11], [-4, 20]]
它将成为这样的:
[[]]
我猜我需要一个聪明的使用np.delete
和np.where
办法?
在此先感谢。
因此,我有一个numpy元组数组,我想删除第一个值小于0或第二个元素大于数字n的所有元组。
所以,如果n = 10,我们有这个数组:删除满足2个条件的2D numpy数组中的元组
[[-1, 5], [3, 11], [-4, 20]]
它将成为这样的:
[[]]
我猜我需要一个聪明的使用np.delete
和np.where
办法?
在此先感谢。
你可以使用逻辑索引来解决这个问题。我猜你的榜样,你意味着
[[-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]])
您可以使用类似以下内容:
>>> 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
来表达你的病情。