當我嘗試向量化以下bump函數時,我注意到一些奇怪的行爲。它應該在開區間(-1,1)的任何輸入返回正值,以及用於輸入返回0別處:Python - 擴展numpy數組更改向量化函數的所有值
>>import numpy as np
>>def bump(x):
if np.abs(x)<1:
return np.exp(-1/(1-x**2))
else:
return 0
>>vbump=np.vectorize(bump)
當我然後嘗試包含在僅值陣列上評價函數vbump
(-1,1),它的行爲與預期:
>>x=np.linspace(-0.99,0.99,10)
>>vbump(x)
array([ 1.50022600e-22, 8.57431637e-02, 2.38427081e-01,
3.25559999e-01, 3.63401061e-01, 3.63401061e-01,
3.25559999e-01, 2.38427081e-01, 8.57431637e-02,
1.50022600e-22])
在另一方面,當我嘗試對其進行評估其中包含的(1,1)以外的值數組我得到的所有零上,即使是值應該是正數:
>>x2=np.linspace(-1.1,1.1,10)
>>vbump(x2)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
它爲什麼會這樣?我對python和numpy相當陌生,但是從我的理解來看,當我向一個函數進行矢量化時,它應該允許函數以元素方式在列表上進行線程化。爲什麼要將更大的數組影響其他地方的元素智能評估?
我要補充一點,我已經找到了解決方案,以評估在一個陣列碰撞功能的直接問題,使用
>>np.piecewise(x, [x <=-1, x >= 1,(-1<x)&(x<1)], [0,0,lambda t:np.exp(-1/(1-t**2))])
,但我還是想了解正在發生的事情與我最初的方法。
的重複https://stackoverflow.com/questions/26316357/ numpy的,矢量化 - 回報 - 不正確值 –