【发布时间】:2016-02-14 04:42:07
【问题描述】:
我正在尝试使用 numpy.vectorize 和这个 lambda 函数来 np.vectorize 一个单周期锯齿函数:
saw = lambda x: 0 if x < -2 or x > 2 else x
但是当我将向量化的saw 应用到这个数组时:
array([-4. , -3.57894737, -3.15789474, -2.73684211, -2.31578947,
-1.89473684, -1.47368421, -1.05263158, -0.63157895, -0.21052632,
0.21052632, 0.63157895, 1.05263158, 1.47368421, 1.89473684,
2.31578947, 2.73684211, 3.15789474, 3.57894737, 4. ])
我明白了:
array([ 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 0])
这是怎么回事?
考虑到我正在使用 Python 2.7 和 numpy 1.10.2
【问题讨论】:
-
请显示您用于生成此文件的所有相关代码。看起来您的数据正在以某种方式转换为整数。也许换成
saw = lambda x: 0.0 if x < -2 or x > 2 else x? -
注意:最好使用
np.where而不是np.vectorize。np.vectorize真的很慢。 -
在这种情况下,
where比vectorize快 2 倍。使用布尔掩码,我可以将其放大 3 倍。