gpt4 book ai didi

python - 使用点积乘以向量矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:16 29 4
gpt4 key购买 nike

我有两个二维矩阵,其中每个单元格都是一个包含三个元素的向量。

我想要做的是使用二维矩阵乘法,其中当任何单元格相乘时,它采用三元素向量的点积。

我缺乏线性代数技能,如果已经有答案,我深表歉意,我查看了许多与 tensordot 和 einsums 相关的页面,但我不明白这些如何适用于我的情况。

这基本上是我得到的:

import numpy as np
ar1 = np.array([[[1,2,3],[3,4,5]],[[5,6,7],[7,8,9]]])
ar2 = np.array([[[2,3,4],[4,5,6]],[[6,7,8],[8,9,10]]])

这是制作我想要的东西的方法:

final = [[0 for x in range(2)] for y in range(2)] 

final[0][0] = np.dot(ar1[0][0], ar2[0][0]) + np.dot(ar1[0][1], ar2[1][0])
final[0][1] = np.dot(ar1[0][0], ar2[0][1]) + np.dot(ar1[0][1], ar2[1][1])
final[1][0] = np.dot(ar1[1][0], ar2[0][0]) + np.dot(ar1[1][1], ar2[1][0])
final[1][1] = np.dot(ar1[1][0], ar2[0][1]) + np.dot(ar1[1][1], ar2[1][1])

final

Output: [[106, 142], [226, 310]]

实际上,这些矩阵的大小约为 3000x40000x3 和 40000x40x3,因此非常感谢将速度考虑在内。谢谢!

最佳答案

这里是如何使用 einsum

np.einsum('ijl,jkl',ar1,ar2)
# array([[106, 142],
# [226, 310]])

tensordot

np.tensordot(ar1,ar2,((1,2),(0,2)))
# array([[106, 142],
# [226, 310]])

reshape

ar1.reshape(2,-1)@ar2.transpose(0,2,1).reshape(-1,2)
# array([[106, 142],
# [226, 310]])

关于python - 使用点积乘以向量矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56744042/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com