首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向量化乘积Over

向量化乘积Over
EN

Stack Overflow用户
提问于 2021-11-04 13:24:00
回答 1查看 50关注 0票数 3

我正在寻找以下计算的矢量化形式:

代码语言:javascript
复制
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的出现让我有点迷惑。

编辑:减小矩阵的大小。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-04 13:51:18

我试图使广播尽可能明确- None引入了一个大小为1的额外虚拟维度:

代码语言:javascript
复制
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)的期望输出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69839952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档