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

如何用NumPy无循环计算两个矩阵对应行的协方差

NumPy无循环计算两个矩阵对应行协方差的实现

实现思路

两个向量的无偏协方差计算公式如下:

$cov(a,b) = \frac{\sum_{i=1}^n (a_i - \mu_a) * (b_i - \mu_b)}{n-1}$
其中$\mu_a$、$\mu_b$分别是向量$a$、$b$的均值,$n$是向量的元素个数。
我们可以利用NumPy的广播和向量化特性,对两个矩阵做批量去中心化、对应元素相乘、按行求和操作,直接得到所有对应行的协方差结果,不需要显式编写for循环。

实现代码

import numpy as np

m1 = np.array([[1,2,3],[2,2,2]])
m2 = np.array([[2.56, 2.89, 3.76],[1,2,3.95]])

row_len = m1.shape[1]
# 对两个矩阵逐行去中心化:每个元素减去所在行的均值
m1_centered = m1 - m1.mean(axis=1, keepdims=True)
m2_centered = m2 - m2.mean(axis=1, keepdims=True)
# 逐元素相乘后按行求和,除以(行长度-1)得到无偏协方差
output = np.sum(m1_centered * m2_centered, axis=1) / (row_len - 1)

print(output)

结果验证

运行上述代码得到的输出为[0.6005, 0. ],和原有for循环实现的输出完全一致,运算效率远高于显式循环,尤其适合大矩阵场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:39:03