我正在寻找以下计算的矢量化形式:
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的出现让我有点迷惑。
编辑:减小矩阵的大小。
发布于 2021-11-04 13:51:18
我试图使广播尽可能明确- 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)。最后,如果我们在最后一个维度上减少via乘积,我们就会得到(D, K)的期望输出。
https://stackoverflow.com/questions/69839952
复制相似问题