You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对含多列表的矩阵执行成对运算并生成对称矩阵及成对分析

矩阵成对运算与NumPy实现方案

核心逻辑:从2个向量到N个向量的扩展

当你有2个向量L、M时,成对点积的结果可以整理为对称矩阵:

[[M·M, M·L],
 [L·M, L·L]]

这本质是向量矩阵与其转置的矩阵乘法——将所有向量按行(或列)组成矩阵,矩阵与自身转置相乘后,每个位置(i,j)就对应第i个向量和第j个向量的点积。由于点积满足交换律(a·b = b·a),结果自然是对称矩阵。

当向量数量扩展到N个时,这个逻辑完全通用:将N个向量构造成N×D的矩阵(D为向量维度),计算该矩阵与自身转置的乘积,即可得到N×N的对称成对运算矩阵。

针对给定NumPy数组的实现

给定数组:

import numpy as np
x = np.array([[1, 3, 5],[1, 4, 5],[2,6,10]])

x包含3个3维行向量,以下是两种常用实现方式:

方法1:矩阵乘法(最简洁)

直接用dot函数计算矩阵与转置的乘积:

pairwise_dot = x.dot(x.T)
print(pairwise_dot)

输出结果:

[[ 35  36  72]
 [ 36  42  84]
 [ 72  84 140]]
  • 对角线元素:对应每个向量自身的点积(如35 = 1²+3²+5²)
  • 非对角线元素:对应两个不同向量的点积(如36 = 1*1 + 3*4 +5*5),且满足对称特性

方法2:使用np.inner函数

np.inner对二维数组默认计算每行之间的点积,结果与上述方法完全一致:

pairwise_dot = np.inner(x, x)
print(pairwise_dot)

自定义成对运算的通用方案

如果需要执行点积以外的成对运算(如自定义距离、乘积和等),可以利用三角索引遍历并填充对称矩阵:

n = x.shape[0]
result = np.zeros((n, n))

# 获取上三角索引(跳过对角线)
i, j = np.triu_indices(n, k=1)
# 替换为你的自定义运算,示例仍用点积
result[i, j] = np.einsum('ij,ij->i', x[i], x[j])
# 对称填充下三角
result[j, i] = result[i, j]
# 填充对角线(自身运算)
np.fill_diagonal(result, np.einsum('ij,ij->i', x, x))

print(result)

内容的提问来源于stack exchange,提问作者ASking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:40:44