我正在尝试将函数应用于numpy数组的每个元素以及一些参数。
def wcdf(u, A, k):
if(u > 0):
y=(1 - np.exp(-(u/A)**(k)));
return y
else:
return(0)
我不知道自己错过了什么,但只要数组有0
,它就会为每个元素返回0
。
f=np.vectorize(wcdf)
u=f(np.array([1,2]),10,2);
print(u)
结果:[0.00995017 0.03921056]
以上工作正常,但当我有零时:
u=f(np.array([0,2]),10,2);
print(u)
结果:[0 0]
有人可以指出我做错了什么!!!!
由于
答案 0 :(得分:4)
尝试将数组作为np.float32
import numpy as np
def wcdf(U, A, k):
return np.array([1 - np.exp(-(u/A)**(k)) if u >0 else 0 for u in U])
u=wcdf(np.array([0,2],dtype=np.float32),10,2);
print(u)
我的结果:
[ 0. 0.03921056]
使用np.vectorize
import numpy as np
def wcdf(u, A, k):
return 1 - np.exp(-(u/A)**(k)) if u >0 else 0
f = np.vectorize(wcdf,otypes=[float])
u=f(np.array([0,2],dtype=np.float32),10,2);
print(u)
结果:
[ 0. 0.03921056]
您已将otypes
添加为float