在Python中表示稀疏矩阵并存储到磁盘

时间:2014-04-09 16:33:39

标签: python numpy

我有大量不同长度的时间序列(数百万)我计划进行聚类分析(可能使用kmeans的sklearn实现)。

出于我的目的,我需要对齐时间序列(使最大值居中,用零填充它们(因此它们的长度都相同),并在我进行聚类分析之前将它们标准化。琐碎的例子,如:

[5, 0, 7, 10, 6]

会变成类似

的东西
[0, 0.5, 0, 0.7, 1, 0.6, 0, 0, 0]

在实际数据中,原始时间序列的长度为90,填充/对齐/赋范时间序列的长度为181.当然,这里有很多零,因此稀疏矩阵似乎是理想的方式。存储数据。

基于此,我有两个相关的问题:

1 - 如何最好地将这些存储在内存中?我目前的低效方法是为每个时间序列计算密集标准/对齐/填充矩阵,并写入一个简单的文本文件用于存储目的,然后分别将该数据读入scipy稀疏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 - 有更好的方法将时间序列存储在磁盘上吗?我还没有找到一种有效的方法将数据直接写入磁盘作为稀疏矩阵,以后我可以(相对)快速地读入内存。

我的理想响应是解决这两个问题的方法,即将密集矩阵行直接存储到稀疏数据结构中的方法,以及有效地向/从磁盘读取/写入数据的方法。

1 个答案:

答案 0 :(得分:0)

我建议使用pandas support for sparse matrixes,然后使用IO tools来编写,例如到HDFS。