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

修复numpy sliding_window_view报错,计算数组特征与一维数组的相关系数

问题解决与替代实现方法

错误原因与修复

你用sliding_window_view时出错,根源是x是2维数组(形状(442,10)),但你只传了一个窗口大小参数——这个函数要求窗口形状的维度数必须和输入数组的维度数完全匹配,所以得给每个维度指定窗口大小。

但实际上你根本不需要滑动窗口:x的每一列就是一个长度为442的特征,直接取列和y计算相关系数即可,滑动窗口在这里完全多余。修复后的代码可以去掉sliding_window_view,直接对x的列进行计算:

import numpy as np

def np_corr(w, z):
    n = len(z)
    sum_w = np.sum(w, axis=0)
    sum_w2 = np.sum(w**2, axis=0)
    sum_z = np.sum(z)
    sum_z2 = np.sum(z**2)
    
    numerator = n * np.sum(w * z[:, None], axis=0) - sum_w * sum_z
    denom = np.sqrt((n * sum_w2 - sum_w**2) * (n * sum_z2 - sum_z**2))
    
    return np.divide(numerator, denom, where=denom != 0)

# 直接传入x,按列计算每个特征与y的相关系数
corr = np_corr(x, y)
print(corr)  # 输出形状为(10,)的数组,对应10个特征与y的相关系数

更简洁的替代实现方法

方法1:用numpy内置np.corrcoef直接计算

numpy提供了现成的相关系数计算函数,代码更简洁易读:

import numpy as np

# 把y转为列向量,和x拼接成(442,11)的数组
combined = np.hstack([x, y[:, None]])
# 计算相关系数矩阵,rowvar=False表示每一列是一个变量
corr_matrix = np.corrcoef(combined, rowvar=False)
# 取最后一行的前10个值,就是y与x各特征的相关系数
corr = corr_matrix[-1, :-1]
print(corr)

方法2:通过协方差矩阵推导相关系数

相关系数可由协方差和标准差推导而来,公式为corr = cov(x,y)/(std(x)*std(y)),实现代码:

import numpy as np

# 计算协方差矩阵(每列是变量)
cov_matrix = np.cov(x, y, rowvar=False)
# 取出x各特征与y的协方差
cov_xy = cov_matrix[:-1, -1]
# 计算x各特征的标准差和y的标准差
std_x = np.sqrt(np.diag(cov_matrix[:-1, :-1]))
std_y = np.sqrt(cov_matrix[-1, -1])
# 计算相关系数
corr = cov_xy / (std_x * std_y)
print(corr)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:55:16