用新值转换NumPy数组的指定元素

时间:2014-09-28 12:03:28

标签: python arrays numpy

我想将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

1 个答案:

答案 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]])