如果我有一个单调递增值的数组,如何将结束值设置为零?例如:
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)
答案 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. ])
但是您必须考虑如何处理边缘情况。