首先,我定义了一个relu函数并将其矢量化。
然后,我将一个任意列表输入到这个relu函数中,但是它返回错误的结果,因为relu( 1.5 )的值应该是1.5。
守则如下:
import numpy as np
def relu(x):
return x if x > 0 else 0
relu = np.vectorize(relu)
print(relu([-3,-1.5,0,1.5,3]))
# result: array([0, 0, 0, 1, 3])你能解释一下为什么会发生这种事吗?
发布于 2022-10-23 11:51:02
因为除非指定了输出类型,否则矢量图从第一个元素假定类型。使用
relu = np.vectorize(relu,otypes=[float])发布于 2022-10-23 12:05:37
我想我应该补充一点,np.vectorize不是真正的矢量化,它基本上是一个for循环。
矢量化函数主要是为了方便而不是为了性能而提供的。实现本质上是一个for循环。
你应该用这个代替:
def relu(x):
return np.maximum(x, 0)计时:
Your method:
%%timeit
relu([-3,-1.5,0,1.5,3])
27.1 µs ± 317 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
This method:
%%timeit
relu([-3,-1.5,0,1.5,3])
3.19 µs ± 14.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)https://stackoverflow.com/questions/74170850
复制相似问题