首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建非冗余相关矩阵Python的最有效方法?

创建非冗余相关矩阵Python的最有效方法?
EN

Stack Overflow用户
提问于 2016-02-25 04:40:40
回答 1查看 626关注 0票数 2

我觉得numpy、scipy或networkx都有方法可以做到这一点,但我只是还没有弄明白。

我的问题是如何以最有效的方式从大型数据集的冗余相关矩阵创建DataFrame形式的非冗余相关矩阵?

我在一个7000x7000的矩阵上使用这个方法,在我的MacBook Air4 4GB内存上它会耗费很长时间(我知道,我绝对不应该使用这个来编程,但那是另一个讨论)

冗余相关矩阵示例

非冗余相关矩阵示例

我在下面给出了一种相当天真的方法,但肯定有更好的方法。我喜欢将矩阵存储在稀疏矩阵中,并将其转换为数据帧以供存储。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import networkx as nx

#Example DataFrame
L_test = [[0.999999999999999,
  0.374449352805868,
  0.000347439531148995,
  0.00103026903356954,
  0.0011830950375467401],
 [0.374449352805868,
  1.0,
  1.17392596672424e-05,
  1.49428208843456e-07,
  1.216664263989e-06],
 [0.000347439531148995,
  1.17392596672424e-05,
  1.0,
  0.17452569907144502,
  0.238497202355299],
 [0.00103026903356954,
  1.49428208843456e-07,
  0.17452569907144502,
  1.0,
  0.7557000865939779],
 [0.0011830950375467401,
  1.216664263989e-06,
  0.238497202355299,
  0.7557000865939779,
  1.0]]
labels = ['AF001', 'AF002', 'AF003', 'AF004', 'AF005']
DF_1 = pd.DataFrame(L_test,columns=labels,index=labels)

#Create Nonredundant Similarity Matrix
n,m = DF_test.shape #they will be the same since it's adjacency
#Empty array to fill
A_tmp = np.zeros((n,m)) 
#Copy part of the array
for i in range(n):
    for j in range(m):
        A_tmp[i,j] = DF_test.iloc[i,j]
        if j==i:
            break
#Make array sparse for storage
A_csr = csr_matrix(A_tmp) 
#Recreate DataFrame
DF_2 = pd.DataFrame(A_csr.todense(),columns=DF_test.columns,index=DF_test.index) 
DF_2.head()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-25 04:53:51

我认为您可以使用np.tril创建数组,然后使用DataFrame DF_1对其进行倍增

代码语言:javascript
复制
print np.tril(np.ones(DF_1.shape))
[[ 1.  0.  0.  0.  0.]
 [ 1.  1.  0.  0.  0.]
 [ 1.  1.  1.  0.  0.]
 [ 1.  1.  1.  1.  0.]
 [ 1.  1.  1.  1.  1.]]

print np.tril(np.ones(DF_1.shape)) * DF_1
          AF001         AF002     AF003   AF004  AF005
AF001  1.000000  0.000000e+00  0.000000  0.0000      0
AF002  0.374449  1.000000e+00  0.000000  0.0000      0
AF003  0.000347  1.173926e-05  1.000000  0.0000      0
AF004  0.001030  1.494282e-07  0.174526  1.0000      0
AF005  0.001183  1.216664e-06  0.238497  0.7557      1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35612629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档