注意:我知道這與Use numpy.tensordot to replace a nested loop非常相似,只是我們正在處理的實際實體似乎不同(我需要二次形式計算)而且我不夠聰明,無法推斷那里的討論,因此提出這個問題。
目標:通過用矩陣計算或/和通用函式替換 for 回圈來加快計算速度。
問題:
#Toy example
def A(a):
return [[a,1,1],[1,1,1],[1,1,a**2]]
val = 0
for a in range(1,5):
for x in [ [1,1,1], [2,2,2], [3,3,3] ]:
val =np.exp(-1* np.dot(np.dot(x,A(a)), x))
print(val)
在實際實作中,我將 x 作為 9 維向量,范圍超過 10**9 次迭代,范圍超過 (50)**2 次迭代,并且使用這個 for 回圈需要永遠?有什么建議么?我覺得 tensordot 似乎最有可能,但我一直未能得到我想要的結果,因此問。由于我是一個真正的初學者,如果您能寫出我可以直接應用的示例代碼,那將非常有幫助......提前致謝。
補充:經過進一步調查,np.tensordot() 似乎不一定是最快的,因此歡迎使用除 for 回圈之外的任何解決方案。(例如,使用 np.einsum 兩次,結合使用 np.dot 和 np. einsum等)感謝@hpaulj,我現在知道如何消除z回圈,但我真的很想解決a回圈......
uj5u.com熱心網友回復:
這
In [155]: a=1
...: val=0
In [156]: for x in [ [1,1,1], [2,2,2], [3,3,3] ]:
...: val =np.exp( np.dot(np.dot(x,A(a)), x))
...:
In [157]: val
Out[157]: 1.5060973145850306e 35
部分可以替換為
In [158]: X = np.array([ [1,1,1], [2,2,2], [3,3,3] ])
In [159]: np.exp(np.einsum('ki,ij,kj->k',X,A(a),X)).sum()
Out[159]: 1.5060973145850306e 35
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473663.html
上一篇:我遇到了單熱編碼問題
