我想np.vectorize AA单期看到使用numpy.vectorize这个lambda函数牙齿功能:NumPy的矢量化行为
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'? – SethMMorton
注意:最好使用'np.where'代替'np.vectorize'。 'np.vectorize'真的很慢。 – user2357112
在这种情况下,'where'比'vectorize'快2倍。使用布尔掩码,我可以使它成为3x。 – hpaulj