python - 使用 Numpy 进行矩阵和张量乘法
问题描述
我正在尝试使用张量进行矩阵乘法,但我不确定如何使用 Numpy 进行。我一直在尝试与 合作np.tensordot()
,但我无法做到
以更简单的方式,如果我们要进行矩阵乘法,并且我们有一个向量 v (Nx1) 和一个矩阵 S (NxN),我们可以进行运算
v^TS v => (1xN)(NxN)(Nx1) => 一个数字
v = np.ones((3,1))
S = np.ones((3,3))
y = v.T.dot(S).dot(v)
y.shape = (1) or ()
现在,我想做以下事情:
让矩阵 M (3x5) 和张量 Z (5x3x3) 得到
M^TZM
,其中 (M^TZ) 产生 (5x3) 矩阵,M^TZM 产生 (1x5) 向量
M = np.ones((3,5))
Z = np.ones((5,3,3))
Y = <?> M.T * Z * M <?>
Y.shape = (5,) or (1,5)
有谁知道如何在不使用 Tensorflow 的情况下使用 Numpy 做到这一点?
解决方案
我认为这可以计算出你想要的:
import numpy as np
M = np.ones((3, 5))
Z = np.ones((5, 3, 3))
# Multiply (5, 1, 3) x (5, 3, 3) x (5, 3, 1)
result = (M.T[:, np.newaxis] @ Z @ M.T[:, :, np.newaxis]).squeeze()
print(result)
输出:
[9. 9. 9. 9. 9.]
为方便起见,我使用了该运算符,但如果您更喜欢它或使用较旧的 Python 版本@
,可以将其替换为:np.matmul
result = np.matmul(np.matmul(M.T[:, np.newaxis], Z), M.T[:, :, np.newaxis]).squeeze()
推荐阅读
- dotnetnuke - Dotnetnuke 社区安装
- aws-kms - aws-encryption-cli:如何在加密期间设置配置文件时使用解密?
- python - Pymongo 将查询结果转换为自定义类型
- typescript - 如何为 npm 包中的对象声明新属性?
- javascript - PostCSS 插件:如何获取 CSS4 变量的值
- swift - 为什么在尝试转换图像时 URL 无法正常工作?
- javascript - Jest with WebSockets 会忽略第一个消息之后的消息吗?
- serial-port - 使用 FTDI 芯片从另一个设备发送到 PC 的 uart 数据包之间的延迟
- angular - 如何在 AWS API Gateway 上为 Angular 推送状态路由添加重写规则
- google-bigquery - 使用数组数组插入 Bigquery 表