所以我有一个numpy数组的元组,我想删除第一个值小于0或第二个元素大于数字的所有元组,n。 所以如果n = 10并且我们有这个数组:
[[-1, 5], [3, 11], [-4, 20]]
它会变成这样:
[[]]
我猜我需要以聪明的方式使用np.delete
和np.where
?
提前致谢。
答案 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]])