将一系列值转换为0

时间:2018-01-04 03:19:24

标签: python numpy

如何将列表(numpy数组)列表中的一系列值转换为一个数字,并将所有其他数字保留原样, 我试过了

np.where(array!= range(-1024,0),array,0))

但是这个给了我一个错误,关于我如何这样做的任何建议,在此先感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用isin

array = np.array([-150,105,250,-520,-1024,-1050])

np.where( ~np.isin(array, np.arange(-1024,0)) , array, 0)

array([    0,   105,   250,     0,     0, -1050])

答案 1 :(得分:2)

您可以使用

np.where(np.logical_and(a>=-1024 , a<=0),0,a)

这将检查a的元素是否在[-1024,0]范围内并使其为0,否则保持不变。

您也可以参考此答案Numpy where function multiple conditions

答案 2 :(得分:0)

为什么不是一个简单的列表理解:

[e if e not in range(-1024,0) else 0 for e in array]

或等效(更直接):

[0 if e in range(-1024,0) else e for e in array]

编辑:可能有人认为基于列表的答案更容易阅读,但它比基于numpy的答案要慢得多(想想3.76 µs vs 453 µs!)所以我想坚持不懈的答案。