首先,我定義了一個 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])
你能解釋一下為什么會這樣嗎?
uj5u.com熱心網友回復:
因為除非指定了輸出型別,否則 vectorize 會假定第一個元素的型別。利用
relu = np.vectorize(relu,otypes=[float])
uj5u.com熱心網友回復:
我想我應該補充一點, 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://www.uj5u.com/yidong/519663.html
標籤:Python麻木的
上一篇:如何將矩陣轉換為向量?
