![](/img/trans.png)
[英]is there an efficient way to share a read-only sparse matrix in multiprocessing in python
[英]Efficient way to populate a sparse matrix in Python
我正在嘗試建立期刊共現的稀疏矩陣(dok_matrix)。 不幸的是,我的解決方案效率低下,無法使用,而且我無法在線找到任何解決方案。
編輯:我也想直接創建稀疏矩陣,而不是先創建一個密集矩陣,然后將其變成稀疏矩陣。
我從一個數據框架開始,該數據框架列出了某些期刊被一起引用的頻率。 在此示例中,自然和科學被一起引用了3次。 我想以一個稀疏的對稱矩陣結尾,其中行和列是日記帳,非空條目是這些日記被一起引用的頻率。 即,這里的完整矩陣將具有四行(柳葉刀,自然,NEJM,科學)和四列(柳葉刀,自然,NEJM,科學)和三個非零條目。 由於我的真實數據要大得多,因此我想使用稀疏矩陣表示。
我目前在代碼中執行的操作是使用數據框中的值更新非零條目。 不幸的是,比較期刊名稱非常耗時,而我的問題是,是否可以在此處設置稀疏矩陣的更快方法。
我的理解是,我的數據框無論如何都接近dok_matrix,日記組合等效於在dok_matrix中用作鍵的元組。 但是,我不知道如何進行這種轉換。
任何幫助表示贊賞!
# Import packages
import pandas as pd
from scipy.sparse import dok_matrix
# Set up dataframe
d = {'journal_comb': ['Nature//// Science', 'NEJM//// Nature', 'Lancet//// NEJM'], 'no_combs': [3, 5, 6], 'journal_1': ['Nature', 'NEJM', 'Lancet'], 'journal_2': ['Science', 'Nature', 'NEJM']}
df = pd.DataFrame(d)
# Create list of all journal titles
journal_list = list(set(set(list(df['journal_1'])) | set(list(df['journal_2']))))
journal_list.sort()
# Set up empty sparse matrix with final size
S = dok_matrix((len(journal_list), len(journal_list)))
# Loop over all journal titles and get value from Dataframe for co-occuring journals
# Update sparse matrix value with value from Dataframe
for i in range(len(journal_list)):
print i
# Check whether journal name is actually in column 'journal_1'
if len(df[(df['journal_1'] == journal_list[i])]) > 0:
for j in range(len(journal_list)):
# If clause to circumvent error due to empty series if journals are not co-cited
if len(df[(df['journal_1'] == journal_list[i]) & (df['journal_2'] == journal_list[j])]['no_combs']) == 1:
# Update value in sparse matrix
S[i, j] = df[(df['journal_1'] == journal_list[i]) & (df['journal_2'] == journal_list[j])]['no_combs'].iloc[0]
首先使用熊貓來塑造矩陣-
dok_matrix(pd.concat([df, df.rename(index=str, columns={'journal_1' : 'journal_2', 'journal_2' : 'journal_1'})], axis=0).pivot(index='journal_1', columns = 'journal_2', values = 'no_combs').as_matrix())
我首先將反向日記帳1附加為日記帳2,然后進行旋轉以形成正確的形狀,然后轉換為矩陣,再轉換為dok_matrix
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.