私は単純な要素単位の行列乗算を高速化しようとして、numba と numexpr をいじっています。私はより良い結果を得ることができませんでした。どちらも基本的に(スピード的に)numpysの乗算関数と同等です。この分野で運が良かった人はいますか?私は numba と numexpr を間違って使用していますか (私はこれにまったく慣れていません)、またはこれを高速化するためのまったく悪いアプローチですか? ここに再現可能なコードがあります。
import numpy as np
from numba import autojit
import numexpr as ne
a=np.random.rand(10,5000000)
# numpy
multiplication1 = np.multiply(a,a)
# numba
def multiplix(X,Y):
M = X.shape[0]
N = X.shape[1]
D = np.empty((M, N), dtype=np.float)
for i in range(M):
for j in range(N):
D[i,j] = X[i, j] * Y[i, j]
return D
mul = autojit(multiplix)
multiplication2 = mul(a,a)
# numexpr
def numexprmult(X,Y):
M = X.shape[0]
N = X.shape[1]
return ne.evaluate("X * Y")
multiplication3 = numexprmult(a,a)