【发布时间】:2014-05-23 00:24:26
【问题描述】:
我计划对大量不同长度的时间序列(数百万)进行聚类分析(可能使用 kmeans 的 sklearn 实现)。
出于我的目的,我需要对齐时间序列(使最大值居中,用零填充它们(因此它们都是相同的长度),并在我可以进行聚类分析之前对它们进行规范化。所以作为一个简单的例子,比如:
[5, 0, 7, 10, 6]
会变成这样的
[0, 0.5, 0, 0.7, 1, 0.6, 0, 0, 0]
在实际数据中,原始时间序列的长度为 90,填充/对齐/标准化时间序列的长度为 181。当然,我们这里有很多零,所以稀疏矩阵似乎是理想的方法存储数据。
基于此,我有两个相关的问题:
1 - 如何最好地将这些存储在内存中?我目前的低效方法是为每个时间序列计算 dense 规范/对齐/填充矩阵并写入一个简单的文本文件以进行存储,然后将该数据分别读入一个 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 - 有没有更好的方法将时间序列存储在磁盘上?我还没有找到一种有效的方法将数据作为稀疏矩阵直接写入磁盘,以后我可以(相对)快速地读入内存。
我的理想回答是解决这两个问题的方法,即将密集矩阵行直接存储到稀疏数据结构中,并有效地从磁盘读取/写入数据。
【问题讨论】: