替换numpy数组中多个元素的最快方法

根据列表替换数组中值的简单示例:

import numpy as np

l = [1,3,4,15]
a = np.array([1,1,2,4,6,7,8,9,1,2,3,4,89,12,23,3,4,10,15])
for element in l:
     a = np.where(a == element, 0, a)

由于这很慢,因此我正在寻找一种扩展性更好的替代方法。

评论
  • 大白痴
    大白痴 回复

    You can use np.where with np.in1d:

    np.where(np.in1d(a, l), 0, a)
    
    array([ 0,  0,  2,  0,  6,  7,  8,  9,  0,  2,  0,  0, 89, 12, 23,  0,  0,
           10,  0])
    
  • 间接性抑郁
    间接性抑郁 回复

    Use numpy.where with numpy.isin:

    np.where(np.isin(a, l), 0, a)
    

    输出:

    array([ 0,  0,  2,  0,  6,  7,  8,  9,  0,  2,  0,  0, 89, 12, 23,  0,  0,
           10,  0])
    
  • 君追
    君追 回复

    Use np.where with np.isin:

    a = np.where(np.isin(a, l), 0, a)
    print(a)
    

    输出:

    [ 0  0  2  0  6  7  8  9  0  2  0  0 89 12 23  0  0 10  0]
    

    如果您的numpy版本小于1.13.0,请使用@yatu的答案。

    Since as mentioned in the documentation's notes:

    1.13.0版中的新功能。