python - 在没有for循环的python中取两个数组的点积
问题描述
我有两个数组W
和x
. W
有形有形。(16, 10)
_ 我需要在 和 的转置之间取点积。问题是 和 的形状非常不同,因此在尝试执行此操作时我不断收到错误消息。当然我可以用循环来做到这一点,但我想在不使用任何循环的情况下做到这一点。x
(10000, 16)
W
x
x
W
for
for
for i in range(x.shape[0])
s = (np.dot(W.transpose(), x[i])) + b
上面的代码生成一个数组,s
,它由 10 个条目组成。我试图达到s
10,000 行,每行有 10 个条目(不使用for
循环)。
解决方案
您可能正在寻找
s = x.dot(W)
或者
s = x @ W
dot
表现为简单一维向量的乘积,否则是成熟的矩阵乘法。由于您需要(10000, 10)
结果形状,因此您需要设置矩阵以在外部维度中具有该形状,并匹配内部维度:
(10000, 16) x (16, 10) -> (10000, 10)
要以您想要的任何顺序执行总和,您可以使用np.einsum
:
s= np.einsum('ik,ji->jk', W, x)
或者干脆
s = np.einsum('ik,ji', W, x)
推荐阅读
- installation - Joomla 缺少组件
- javascript - 在本地主机上找不到图像,角度出现 404 错误
- javascript - 尽管正确发送令牌,Django服务器仍报告“禁止(CSRF令牌丢失或不正确。)”?
- mysql - 迁移后mysql表损坏
- ruby-on-rails - 升级到 Rails 6 时有一种编程方式来检测 Zeitwerk::NameError?
- javascript - 在 forEach 循环中使用 Javascript FileReader 追加元素
- c# - 我的程序不断将整个数组的颜色更改为一种颜色,而不是每种颜色都不同
- java - 检查 ArrayList 是否包含与另一个 ArrayList 相同的元素
- vue.js - 如何在 vuejs (vuetify) 中动态创建输入字段
- javascript - 无法读取在 javascript 中发布和嵌入的谷歌文档的内容