在Python中将函数应用于numpy数组

时间:2018-03-15 08:36:48

标签: python numpy scipy

我正在尝试将函数应用于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]

有人可以指出我做错了什么!!!!

由于

1 个答案:

答案 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