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

使用Centering matrix实现行均值中心化函数出错求助

代码问题排查与修正

问题1:函数调用名称不匹配

定义的函数是centering,但调用时写的是center_with_matrix,会直接触发名称错误。

问题2:shape属性使用错误

data.shape是numpy数组的属性,并非可调用方法,不能加括号,正确写法是data.shape[0],而非data.shape()[0]。

问题3:函数无返回值

函数内部仅修改了data变量,但未通过return返回计算结果,调用后无法获取中心化后的矩阵。

问题4:中心化矩阵逻辑错误(核心问题)

你需要实现每行减去自身均值的行中心化,但当前代码构造的是用于列中心化(每列减去该列均值)的矩阵,且矩阵维度、乘法顺序均不符合需求:

  • 当前构造的是n×n(n为样本数,即行数)的矩阵,左乘数据矩阵会对列进行操作;
  • 要实现行中心化,需构造p×p(p为特征数,即列数)的中心化矩阵,并让数据矩阵右乘该矩阵。

修正后的行中心化代码

import numpy as np

def centering(data):
    # 获取特征数(列数)p
    p = data.shape[1]
    # 构造行中心化的p×p矩阵
    centering_matrix = np.identity(p) - (1/p) * np.ones((p, p))
    # 数据矩阵右乘中心化矩阵,实现每行减自身均值
    centered_data = data @ centering_matrix
    return centered_data

data = np.array([[1,2,3], [3,4,5]])
result = centering(data)
print(result)

验证结果

运行后输出符合预期:

[[-1.  0.  1.]
 [-1.  0.  1.]]

第一行均值为2,第二行均值为4,每个元素减去对应行的均值后得到上述结果。


若需求为列中心化(每列减列均值)

仅修正前三个问题,保留原矩阵构造逻辑即可:

import numpy as np

def centering(data):
    n = data.shape[0]
    centering_matrix = np.identity(n) - (1/n) * np.ones((n, n))
    centered_data = centering_matrix @ data
    return centered_data

data = np.array([[1,2,3], [3,4,5]])
result = centering(data)
print(result)

输出结果

[[-1. -1. -1.]
 [ 1.  1.  1.]]

内容的提问来源于stack exchange,提问作者sonsuz-ders

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:45:33