Python将数组中单调值的范围设置为零

时间:2014-04-15 03:12:39

标签: python arrays numpy

如果我有一个单调递增值的数组,如何将结束值设置为零?例如:

import numpy as np

a = np.array([1.2,2.2,3.1,4.4,8.3,9])
b = 4.5

for i in np.arange(b,max(a)):
    np.put(a,[i],[0])

print(a)

2 个答案:

答案 0 :(得分:1)

如果您的输入是一个列表,则以下内容应该起作用

a = [1.2,2.2,3.1,4.4,8.3,9]
b = 4.5
a = map(lambda x: x if x <=b else 0.0, a)

如果你想使用numpy对象

a = np.array([1.2,2.2,3.1,4.4,8.3,9])
b = 4.5
a = np.array(map(lambda x: x if x ><=b else 0.0, a.tolist()))

编辑:这不是计算效率最高的计算方法,但它应该是有效的。

答案 1 :(得分:1)

我不认为值得努力利用这样一个事实,即如果它单调增加,你可以节省许多比较。只需写下

>>> a = np.array([1.2,2.2,3.1,4.4,8.3,9])
>>> a[a > 4.5] = 0.0
>>> a
array([ 1.2,  2.2,  3.1,  4.4,  0. ,  0. ])

继续你的一天。我想你可以尝试像

这样的东西
>>> a = np.array([1.2,2.2,3.1,4.4, 8.3, 9])
>>> a[np.searchsorted(a, 4.5):] = 0
>>> a
array([ 1.2,  2.2,  3.1,  4.4,  0. ,  0. ])

但是您必须考虑如何处理边缘情况。