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

如何计算二维NumPy数组中对应行的皮尔逊相关系数

计算NumPy数组对应行的皮尔逊相关系数

现有两个二维NumPy数组:

import numpy as np

a = np.array([[1,2,4],[3,6,2],[3,4,7],[9,7,7],[6,3,1],[3,5,9]])
b = np.array([[4,5,2],[9,2,5],[1,5,6],[4,5,6],[1,2,6],[6,4,3]])

数组展开后为:

a = array([[1, 2, 4],
       [3, 6, 2],
       [3, 4, 7],
       [9, 7, 7],
       [6, 3, 1],
       [3, 5, 9]])

b = array([[4, 5, 2],
       [9, 2, 5],
       [1, 5, 6],
       [4, 5, 6],
       [1, 2, 6],
       [6, 4, 3]])

需求:计算a的第1行与b的第1行、a的第2行与b的第2行……以此类推,每一组对应行的皮尔逊相关系数,期望得到一个一维数组:

array([__ , __ , __, __ , __ , __])

已掌握列方向的计算方法,代码如下:

corr = np.corrcoef(a.T, b.T).diagonal(a.shape[1])

输出结果:

array([-0.2324843 , -0.03631365, -0.18057878])

更新说明

已采纳下方答案,这里提供一种替代解决方案,同时能解决零除错误问题:

def corr2_coeff(A, B):
    # 对输入数组按行求均值,并从原数组中减去该行均值
    A_mA = A - A.mean(1)[:, None]
    B_mB = B - B.mean(1)[:, None]

    # 按行计算平方和
    ssA = (A_mA**2).sum(1)
    ssB = (B_mB**2).sum(1)
    
    # 计算分母,添加极小值避免零除错误
    deno = np.sqrt(np.dot(ssA[:, None], ssB[None])) + 1e-14

    # 最终计算相关系数
    return np.dot(A_mA, B_mB.T) / deno

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:05:04