Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python表示稀疏矩阵并存储到磁盘_Python_Numpy - Fatal编程技术网

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

用Python表示稀疏矩阵并存储到磁盘,python,numpy,Python,Numpy,我有大量不同长度的时间序列,我计划使用kmeans的sklearn实现对它们进行聚类分析 出于我的目的,我需要对齐时间序列,使最大值居中,用零填充它们,使它们都具有相同的长度,并在进行聚类分析之前对它们进行规格化。举个简单的例子,比如: [5, 0, 7, 10, 6] 会变成 [0, 0.5, 0, 0.7, 1, 0.6, 0, 0, 0] 在实际数据中,原始时间序列的长度为90,填充/对齐/规范时间序列的长度为181。当然,这里有很多零,所以稀疏矩阵似乎是存储数据的理想方式 基于此,我

我有大量不同长度的时间序列,我计划使用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-是否有更好的方法将时间序列存储在磁盘上?我还没有找到一种有效的方法,将数据直接作为稀疏矩阵写入磁盘,以便稍后可以相对快速地读入内存


我在这里的理想回答是解决这两个问题的方法,即直接将密集矩阵行存储到稀疏数据结构中的方法,以及高效地将数据读/写到磁盘或从磁盘中读/写数据的方法。

我建议使用,然后使用its写入,例如HDFS。

Ha!我甚至没有意识到熊猫有稀疏矩阵作为支持。这太棒了!但是,您知道处理数据帧迭代添加的正确方法吗?我一次添加一行,但不想构建整个数组,然后转换为稀疏太多内存。我是否可以将稀疏序列添加为行df=df.appendseries.to_sparse,或者我是否必须重新稀疏每个循环的矩阵,即df=df.appendseries.to_sparse?@moutachio:不,我真的不知道。我建议您使用增量增长矩阵,然后填充稀疏数据帧,如用于将稀疏矩阵存储到HDF所述,请参阅。