用python的for-loop處理工作時,效率很差是眾所皆知,這時可以用numba的JIT來加速,但除此之外,還可以更進一步使用vectorize來加速,vectorize顧名思意是向量式處理資料,我們必須把資料排成向量或距陣,一個一個丟到vectorize函數處理,如下函數:
@vectorize(["float32(uint32,float32,uint16,uint8,uint8,uint16,uint8,uint8)"])
def mymul2(count, timeAtt, dep, io, door, dep2, io2, door2):
count *= timeAtt
if dep != dep2:
count *= 0.5
if io != io2:
count *= 0.5
if door != door2:
count *= 0.5
return count
def mymul2(count, timeAtt, dep, io, door, dep2, io2, door2):
count *= timeAtt
if dep != dep2:
count *= 0.5
if io != io2:
count *= 0.5
if door != door2:
count *= 0.5
return count
使用函數時:
returnVec = mymul2(count, timeAtt, np.full(len(dep),dep[0]),np.full(len(io),io[0]) , np.full(len(door),door[0]), dep2, io2, door2)
所有傳入的參數,向量長度都一樣,其中np.full(len(dep),dep[0])是因為要把第一個值和所有值比較,故寫成這種型式。
沒有留言:
張貼留言