用Python表示稀疏矩阵并存储到dis

2024-04-20 15:42:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

[5, 0, 7, 10, 6]

会变成像

^{pr2}$

在实际数据中,原始时间序列的长度为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-有没有更好的方法将时间序列存储在磁盘上?我还没有找到一种有效的方法将数据直接写入磁盘,作为一个稀疏矩阵,我可以在以后很快(相对地)读入内存。在

我的理想回答是一种解决这两个问题的方法,即将密集矩阵行直接存储到稀疏数据结构中,并有效地将数据读/写到磁盘上。


Tags: columns数据方法内存line时间序列矩阵