1
我覺得自己喜歡numpy,scipy或者networkx有一個方法可以做到這一點,但我還沒有弄明白。創建非冗餘相關矩陣Python的最有效方法?
我的問題是如何創建一個非冗餘相關矩陣的DataFrame的形式從一個冗餘相關矩陣爲最大數據集在最有效的方式(在Python中)?
我使用一個7000x7000矩陣這個方法,這是對我的MacBook Air 4GB內存到永遠(我知道,我絕對不應該使用這種編程但這是另一個討論)冗餘的
例相關矩陣
非冗餘相關矩陣的實施例
我在下面做了一個非常天真的做法,但必須有更好的方法。我喜歡將矩陣存儲在稀疏矩陣中,並將它們轉換爲用於存儲目的的數據幀。
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()
這正是我一直在尋找! –
在不到2秒的時間內完成了 –