尝试使用numpy的vectorize
来向量化我自定义的ReLU函数。不知何故,我的numpy数组中的一个值为0.5的元素在通过ReLU函数(例如,max函数)
def relu_activation(x):
return max(0,x)
relu = np.vectorize(relu_activation)
z = np.array([0,0,0.5,1])
z = relu(z)
print(z)
print(z)
输出[0 0 0 1]
,而不是预期的[0 0 0.5 1]
当我用for
循环替换我的向量化函数时,它按预期工作。
2条答案
按热度按时间pbossiut1#
正如@jared评论的那样,最好直接定义向量化函数,例如。
egdjgwm82#
在没有真正阅读文档的情况下使用
np.vectorize
是危险的。在这种情况下,您忽略了有关它如何确定输出dtype
的位。默认情况下,它进行试算,并使用结果来确定dtype。对于[0,0,.5,1]
,第一项的结果是0
,一个整数。所以所有的项都是int。如果你想要一个float结果,确保第一个返回是一个float,或者使用otypes
参数显式地设置它。vectorize
不是速度工具。对于一个参数,而且是1d参数,列表理解更简单,也同样好。注意这个结果的dtype- integer:
给予一个浮点数作为第一个值-并获得浮点数结果:
指定类型:
或者让事情更像列表,对象dtype:
或者调整函数,使其始终返回浮点数
对于像这样简单的函数,不需要
vectorize
。虽然它有它的用途,但对于初学者来说使用它太容易了,因为他们不知道足够的numpy
。如果你一定要理解,不要害怕坚持使用列表理解。