首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >第i行与第i列的点积

第i行与第i列的点积
EN

Stack Overflow用户
提问于 2012-11-20 08:54:37
回答 2查看 1.5K关注 0票数 3

在NumPy中:

代码语言:javascript
运行
复制
A = np.array([[1,2,3],[4,5,6]])
array([[1, 3, 5],
       [2, 4, 6]])

B = np.array([[1,2],[3,4],[5,6]])
array([[1, 2],
       [3, 4],
       [5, 6]])

A.dot(B)
array([[35, 44],
       [44, 56]])

我只关心得到A.dot(B).diagonal() = array([35, 56])

有没有一种方法可以不用计算所有行和列的内积就可以得到array([35, 56])?即ith rowith column的内积

我之所以这样问,是因为矩阵越大,性能差异就越明显。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-20 09:04:12

这只是2D数组的矩阵乘法:

代码语言:javascript
运行
复制
C[i, j] = sum(A[i, ] * B[, j])

既然你只想要对角线元素,看起来你想要的

代码语言:javascript
运行
复制
sum(A[i, ] * B[, i]) # for each i

所以你可以只使用列表理解:

代码语言:javascript
运行
复制
[np.dot(A[i,:], B[:, i]) for i in xrange(A.shape[0])]
# [22, 64]

或者(这只是因为你想要一个维度,所以假设如果A的维度是n x m,那么B的维度就是m x n):

代码语言:javascript
运行
复制
np.sum(A * B.T, axis=1)
# array([22, 64])

(这里没有花哨的麻木把戏,只是玩弄数学)。

票数 5
EN

Stack Overflow用户

发布于 2012-11-20 09:02:34

您可以简单地省略参数中您不关心的行吗?

2x3 x 3x2的结果为2x2。

1x3 x 3x2矩阵将只给出A的顶行,这是一个1x2矩阵。

编辑:误读问题。尽管如此,矩阵中的每个值都是由列和行的转置乘积产生的。

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

https://stackoverflow.com/questions/13465047

复制
相关文章

相似问题

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