我计划对大量不同长度的时间序列(数百万个)进行聚类分析(可能使用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-有没有更好的方法将时间序列存储在磁盘上?我还没有找到一种有效的方法将数据直接写入磁盘,作为一个稀疏矩阵,我可以在以后很快(相对地)读入内存。在
我的理想回答是一种解决这两个问题的方法,即将密集矩阵行直接存储到稀疏数据结构中,并有效地将数据读/写到磁盘上。
我建议使用pandas support for sparse matrixes,然后使用它的IO tools来写入例如HDFS。在
相关问题 更多 >
编程相关推荐