2019年12月20日 星期五

用numba的vectorize加速python計算

用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
使用函數時:
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])是因為要把第一個值和所有值比較,故寫成這種型式。

沒有留言:

張貼留言

IKEA吊櫃廚櫃

 好不容易裝好IKEA買來的吊櫃,花了三天。 從組裝,鑽牆,上牆調水平,累死我了。