python - 减少计算时间和大型协方差矩阵的要求

标签 python numpy statistics covariance-matrix

我目前正在尝试计算大约 30k 行矩阵的协方差矩阵(所有值都在 [0,1] 范围内),并且它需要很长时间(我已经让它运行了一个多小时并且它还没有完成)。

我在较小的示例(7k 行矩阵)上注意到的一件事是,输出的值具有大量的有效数字(例如 ~10^32),并且可能会减慢速度(并增加文件大小) - 是有什么办法可以限制这个吗?

我一直在一个简单的数据帧上使用 numpys 协方差方法:

import numpy as np
import pandas as pd
import sklearn as sk

df = pd.read_csv('gene_data/genetic_data25.csv')

df = df.set_index('ID_REF')
df = (df-df.min(axis = 0))/(df.max(axis = 0)-df.min(axis = 0))

cov = np.cov(df)

cov = pd.DataFrame(cov)

cov.to_csv('/gemnetics/cov_matrix.csv')

最佳答案

由于我对遗传学不熟悉,我将为您提供一般指南并希望它有效。 假设您的数据位于名为 X 的矩阵中,该矩阵为 30+k x 1k。您实际上并不需要对数据进行标准化(除非这对您来说不重要),但要计算协方差,您必须将其居中。然后你可以计算正确的特征向量:

Xp=X-X.mean(axis=0,keepdims=True)
k=Xp.T @ Xp
ev,R=np.linalg.eigh(k)
ev=ev[::-1]
R=R[:,::-1]

此时您应该查看特征值,看看它们是否有突然下降(这是 Scree 方法),我们将这个截止数称为 n。如果没有,那么您只需选择要保留的特征值百分比。 下一步是重建左特征向量:

L=X @ R[:,:n]

现在,R.T 告诉您哪些特征向量组合是重要的,而特征向量 (L) 是您的基因中最重要的组合。 我希望这会有所帮助。

关于python - 减少计算时间和大型协方差矩阵的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51545659/

相关文章:

java - Spring 启动中的 hibernate 统计信息不起作用?

matlab - 正态分布的峰度

python - 从 numpy 数组中提取不在索引列表中的元素

python - 从同一个类创建线程,但使用 Python 中连接的不同方法

python - 使用 numpy 通过另一个列表对矩阵的行和列进行排序

python - 在 Python 中重新格式化制表符分隔的数据

python - 矩阵乘法的最佳 numba 实现很大程度上取决于矩阵大小

Python scipy - 指定自定义离散分布

python - 更改Python比较字符串时的默认逻辑

python - 在 Python 中接收 UDPv6 多播