将 numpy 数组作为列附加到 .npy 文件而不覆盖原始文件

Appending numpy array as columns onto .npy files without overwriting the original file

提问人:rn kim 提问时间:5/23/2023 更新时间:5/23/2023 访问量:35

问:

我使用下面的两种编码方法将两个一维数组(macdLine 和 signalLine)作为列附加到 .npy 文件上,每个文件都包含一个由“i”表示的大型二维数组(每个约 50MB)。当您有几个文件时,这两种方法都足够快,但当有许多文件要处理时(可能需要处理超过 25 个文件)时,它们的速度会很慢。我已经包括了多处理,但我仍然想进一步提高速度。挑战在于,每次发生此类追加时,这些方法都需要覆盖文件——是否有不同的方法或代码更改来实现更快的追加操作(和/或不覆盖原始文件)?

方法1:

file_path = "%s.npy" % (i)

stackedFile = np.save(i, (np.column_stack(((np.load(file_path)),
                                           macdLine, signalLine))), 
                                           allow_pickle=True, fix_imports=False) 

方法2:

file_path = "%s.npy" % (i)
    
npyToPandas['8'] = macdLine
npyToPandas['9'] = signalLine
  
stackedFile = np.save(i, 
                      (pd.DataFrame(npyToPandas).to_numpy()), 
                      allow_pickle=True, fix_imports=False) 
python-3.x pandas numpy io

评论

0赞 hpaulj 5/24/2023
npy由带有 dtype 和 shape(约 256 字节)等信息的标题块组成,然后是数组data_buffer的副本。该data_buffer本质上是数组的 1d。.当您列堆叠多个数组时,您会创建一个全新的数组,而 save 只是写入该新数组。如果使用现有文件名,则会替换该文件名。它没有任何类型的追加,即使数组的数据布局允许它。ravel
0赞 hpaulj 5/24/2023
使用文本文件,可以将行追加到现有文件,但列需要完全重写。 不是文本,所以这样的附加更难。npy

答: 暂无答案