我正在尋找以下計算的矢量化形式:
import numpy as np
D = 100
N = 1000
K = 10
X = np.random.uniform(0, 1, (K, N))
T = np.random.uniform(0, 1000, (D, N))
out = np.zeros((D, K))
for i in range(D):
for j in range(K):
out[i, j] = np.prod(X[j, :] ** T[i, :])
我嘗試過 einsum 風格的東西,但是 np.prod 的存在讓我有點失望。
編輯:減小矩陣的大小。
uj5u.com熱心網友回復:
我試圖使廣播盡可能明確 -None引入了一個額外的大小為 1 的虛擬維度:
out = np.prod(X[None, :, :] ** T[:, None, :], axis=2)
如果我們回憶一下形狀X.shape = (K, N),很容易看出它是如何作業的:, T.shape = (D, N)和out.shape = (D, K)。對于虛擬維度,我們基本上采用了(1, K, N)的冪(D, 1, N),結果為(D, K, N)。最后,如果我們在最后一個維度上減少乘積,我們會得到我們想要的輸出(D, K)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348722.html
上一篇:屏蔽python2d陣列以在特定閾值下更改圓圈中的值
下一篇:numpy串列陣列到二維陣列
