Python 计算大型稀疏矩阵中所有列之间皮尔逊系数的最快方法是什么? 背景

Python 计算大型稀疏矩阵中所有列之间皮尔逊系数的最快方法是什么? 背景,python,pandas,numpy,pearson-correlation,recommender-systems,Python,Pandas,Numpy,Pearson Correlation,Recommender Systems,我有一个稀疏的数据集,比如。我想计算所有列之间的PCC(皮尔逊相关系数),并将其保存以供以后重用。然而,要得到结果是非常耗时的 例如,矩阵有大约800k列和300k行,但对于每列,只有两到三行具有值,而其他行为0(缺少值) 是否有可能在合理的时间内获得PCC矩阵 我试过的 我正在使用Python来完成这项工作。 我尝试过的方法包括: 1. 二, #将'dfs'传输到密集数据帧dfd #格式:(列id、行id、值) VAL=dfd值 col_id=np.unique(vals[:,0]).toli

我有一个稀疏的数据集,比如。我想计算所有列之间的PCC(皮尔逊相关系数),并将其保存以供以后重用。然而,要得到结果是非常耗时的

例如,矩阵有大约800k列和300k行,但对于每列,只有两到三行具有值,而其他行为0(缺少值)

是否有可能在合理的时间内获得PCC矩阵

我试过的 我正在使用Python来完成这项工作。 我尝试过的方法包括:

1. 二,

#将'dfs'传输到密集数据帧dfd
#格式:(列id、行id、值)
VAL=dfd值
col_id=np.unique(vals[:,0]).tolist()
#获取列索引之间的所有组合。
#然而,它需要大约20亿次迭代。
对于组合中的i,j(列ID,2):
#得到col_id等于'i'和'j'的矩阵`
i_val=vals[vals[:,0]==i]
j_val=vals[vals[:,0]==j]
#“i_val”和“j_val”的计算PCC`
pcc=pcc(i_val,j_val)
#将所有“pcc”保存到矩阵中
在python中,我使用一个进程和一个线程来模拟执行
for循环
,如下所示:

导入进度条
导入时间
总计=2000000000
对于progressbar中的i.progressbar(范围(总数)):
时间。睡眠(0.005)#实际时间远大于0.005s
大约需要200天的时间

有什么解决办法吗? 所以,你能帮我解决这个问题吗,或者给我另一个角度来思考这个问题


感谢您的200天

也许将您的数据集(CPU核心的数量)划分几次,然后在一个单独的线程中对每个数据集运行PCC。@hacker315谢谢您的评论,我最终决定通过设置阈值来过滤太小的子组来减小矩阵的大小。
import pandas as pd

# Gets the sparse DataFrame
dfs = pd.DataFrame(...)

# dfs.shape is (300k, 800k)

pcc = dfs.corr()

# save pcc