请问np.einsum('mk,nk', D, D)的作用是什么?D为(3,100)的NumPy数组
解释np.einsum('mk,nk', D, D)的作用
先明确维度对应关系:D是形状为(3, 100)的数组,einsum的标签里:
m对应D的第一个维度(长度3)k对应D的第二个维度(长度100)
这个einsum操作的核心逻辑是:
- 遍历第一个D的每一行(
m维度的每个元素,对应长度100的向量),以及第二个D的每一行(n维度的每个元素,对应长度100的向量) - 对每一对行向量做对应元素相乘后求和(也就是向量点积)
- 最终生成的
(3,3)数组中,result[i,j]的值就是D的第i行和D的第j行的点积
举个具体计算的例子:假设D的第i行是[d_i1, d_i2, ..., d_i100],第j行是[d_j1, d_j2, ..., d_j100],那么result[i,j]就是:d_i1*d_j1 + d_i2*d_j2 + ... + d_i100*d_j100
这个操作完全等价于矩阵乘法D @ D.T(D转置后是(100,3),和原D相乘得到(3,3)的结果),einsum只是用一种更灵活的符号化方式表达了这个行向量两两求点积的过程。
内容的提问来源于stack exchange,提问作者1_million_bugs
相关产品推荐
相关产品推荐

