我想将这个简单的函数应用于numpy数组***fast***:
def f (x):
return max(0,1-abs(x))
为了清楚起见,下面是情节:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(start=-4,stop=4, num=100)
plt.plot(x, list(map(f,x)))
但是,np.vectorize(f)(x)
返回向量0
是的,我知道
提供vectorize
函数主要是为了方便,而不是为了性能。其实现本质上是一个for
循环。
但它至少应该返回一个正确的值不是吗
PS.我设法用手矢量化f
:
def f (x):
z = np.zeros(x.shape)
return np.fmax(z,1-np.abs(x), out=z)
2条答案
按热度按时间ygya80vv1#
这是因为
np.vectorize
将返回类型推断为整数dtype。请注意文档中的这一部分:vectorized输出的数据类型是通过调用输入的第一个元素来确定的。这可以通过指定otypes参数来避免。
在本例中,
max(0, 1 - abs(-4.))
的输出是int
对象0
。您可以更改函数以使用float
,或者显式指定outypes
参数:9o685dep2#
max函数的返回类型为int,因为您使用了0而不是0.0。使用
会给予正确的答案