首页 > 试题广场 >

计算协方差矩阵

[编程题]计算协方差矩阵
  • 热度指数:2433 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
编写一个 Python 函数来计算给定向量集的协方差矩阵。该函数应该采用一个列表列表,其中每个内部列表代表一个特征及其观察结果,并返回一个协方差矩阵。

输入描述:
输入给定向量集。


输出描述:
输出协方差矩阵。
示例1

输入

[[7, 8, 9], [10, 11, 12]]

输出

[[1.0, 1.0], [1.0, 1.0]]

备注:
1.Python3对应的输入、输出已给出,您只用实现核心功能函数即可。
2.支持numpy、scipy、pandas、scikit-learn库。
这个为什么不能用numpy的cov呢
发表于 2025-09-04 22:42:31 回复(1)
import numpy as np

def calculate_matrix_mean(matrix, mode='column'):
    m_cols = len(matrix[0])
    m_rows = len(matrix)
    if mode == 'row':
        list_ = [0] * m_rows
        for i in range(m_rows):
            list_[i] = sum(matrix[i]) / m_cols
    elif mode == 'column':
        list_ = [0] * m_cols
        for i in range(m_cols):
            n = 0
            for j in range(m_rows):
                n += matrix[j][i]
            list_[i] = n / m_rows
    return list_

def calculate_covariance_matrix(vectors):
    vectors = np.array(vectors).T.tolist()
    m_cols = len(vectors[0])
    m_rows = len(vectors)
    col_mean = calculate_matrix_mean(vectors)
    # 计算中心化矩阵
    for i in range(m_cols):
        for j in range(m_rows):
            vectors[j][i] -= col_mean[i]
    coefficient = round(1 / (m_rows - 1), 16)
    covariance_matrix = coefficient * (np.array(vectors).T @ np.array(vectors)) 
    # covariance_matrix = covariance_matrix.round(16)     
    return covariance_matrix.tolist()
    # 补全代码

# 主程序
if __name__ == "__main__":
    # 输入
    ndarrayA = input()

    # 处理输入
    import ast
    A = ast.literal_eval(ndarrayA)

    # 调用函数计算
    output = calculate_covariance_matrix(A)
    
    # 输出结果
    print(output)
为什么保留16位小数还是[[6.666666666666666,6.666666666666666],[6.666666666666666,6.666666666666666]]

发表于 2025-08-24 10:52:38 回复(0)