簡體   English   中英

在Python中表示稀疏矩陣並將其存儲到磁盤

[英]Representing a sparse matrix in Python and storing to disk

我計划對大量不同長度的時間序列(數百萬個)進行聚類分析(可能使用kmeans的sklearn實現)。

出於我的目的,我需要對齊時間序列(以使最大值居中,用零填充(以使它們都具有相同的長度),然后對其進行歸一化,然后再進行聚類分析。例如,就像是:

[5, 0, 7, 10, 6]

會變成像

[0, 0.5, 0, 0.7, 1, 0.6, 0, 0, 0]

在實際數據中,原始時間序列的長度為90,填充/對齊/歸一化的時間序列的長度為181。當然,這里有很多零,因此稀疏矩陣似乎是存儲數據的理想方式。

基於此,我有兩個相關的問題:

1-如何最好地將它們存儲在內存中? 我當前的效率低下的方法是為每個時間序列計算密集的歸一化/對齊/填充矩陣,並寫入一個簡單的文本文件以進行存儲,然后分別將該數據讀取到一個稀疏稀疏的lil矩陣中:

rows, columns = N, 181
matrix = scipy.sparse.lil_matrix( (rows, columns) )

for i,line in enumerate(open(file_containing_dense_matrix_data)):
    # The first two values in each line are metadata
    line = map(float,line.strip().split(',')[2:])

matrix[i]=line

這既慢,又比我希望的要占用更多的內存。 有沒有首選的方法?

2-是否有更好的方法將時間序列存儲在磁盤上? 我還沒有找到一種有效的方法將數據作為稀疏矩陣直接寫入磁盤,以后可以將其(相對)快速讀取到內存中。

在這里,我的理想回答是解決兩個問題的方法,即將密集矩陣行直接存儲到稀疏數據結構中並有效地將數據讀/寫到磁盤的方法。

我建議對稀疏矩陣使用pandas支持 ,然后對它的IO工具使用例如HDFS進行寫入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM