我想将NumPy数组A
的指定元素:1,5和8转换为0。
所以我做了以下事情:
import numpy as np
A = np.array([[1,2,3,4,5],[6,7,8,9,10]])
bad_values = (A==1)|(A==5)|(A==8)
A[bad_values] = 0
print A
是的,我得到了预期的结果,即新数组。
然而,在我的现实问题中,给定的数组(A)非常大并且也是2维的,并且要转换为0的bad_values的数量也太多。所以,我尝试了以下方式:
bads = [1,5,8] # Suppose they are the values to be converted into 0
bad_values = A == x for x in bads # HERE is the problem I am facing
我该怎么做?
然后,当然剩下的就像以前一样。
A[bad_values] = 0
print A
答案 0 :(得分:4)
如果您想获得数组A
中出现错误值的位置的索引,可以使用in1d
找出bads
中的值:
>>> np.in1d(A, bads)
array([ True, False, False, False, True, False, False, True, False, False], dtype=bool)
因此,您只需撰写A[np.in1d(A, bads)] = 0
即可将A
的错误值设置为0
。
编辑:如果你的数组是2D,一种方法是使用in1d
方法然后重塑:
>>> B = np.arange(9).reshape(3, 3)
>>> B
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> np.in1d(B, bads).reshape(3, 3)
array([[False, True, False],
[False, False, True],
[False, False, True]], dtype=bool)
所以你可以做到以下几点:
>>> B[np.in1d(B, bads).reshape(3, 3)] = 0
>>> B
array([[0, 0, 2],
[3, 4, 0],
[6, 7, 0]])