Python合并npz文件

5

有没有办法在Python中合并npz文件。在我的目录中,我有output1.npz和output2.npz。

我想要一个新的npz文件,它可以合并两个npz文件中的数组。


你加载它们,合并它们,然后保存结果。 - Klaus D.
你的操作系统有zip压缩工具吗? - hpaulj
@Klaus,问题在于它们使用默认设置保存到npz中,因此它们将具有相同的字典键名称。 - piccolo
@hpaulj 我更喜欢用Python来做,因为如果我解压缩它,文件会太大。 - piccolo
那么你需要在问题中恰当而完整地描述你的问题,并向我们展示你已经尝试过什么来解决这个问题。 - Klaus D.
3个回答

4

使用 numpy.load('output1.npz')numpy.load('output2.npz') 分别加载两个文件为数组 a1,a2。接着使用 a3 =[*a1,*a2] 合并它们。最后,通过 numpy.savez('output.npz',a3) 输出结果。


0
如果你有三个npz文件('Data_chunk1.npz','Data_chunk2.npz'和'Data_chunk3.npz'),它们都包含相同数量的数组(在我的情况下是7个不同的数组),那么你可以这样做:
import numpy as np

# Load the 3 files
data_1 = np.load('Data_chunk1.npz')
data_2 = np.load('Data_chunk2.npz')
data_3 = np.load('Data_chunk3.npz')

# Merge each of the 7 arrays of the 3 files
arr_0 = np.concatenate([data_1['arr_0'], data_2['arr_0'], data_3['arr_0']])
arr_1 = np.concatenate([data_1['arr_1'], data_2['arr_1'], data_3['arr_1']])
arr_2 = np.concatenate([data_1['arr_2'], data_2['arr_2'], data_3['arr_2']])
arr_3 = np.concatenate([data_1['arr_3'], data_2['arr_3'], data_3['arr_3']])
arr_4 = np.concatenate([data_1['arr_4'], data_2['arr_4'], data_3['arr_4']])
arr_5 = np.concatenate([data_1['arr_5'], data_2['arr_5'], data_3['arr_5']])
arr_6 = np.concatenate([data_1['arr_6'], data_2['arr_6'], data_3['arr_6']])

# Save the new npz file
np.savez('Data_new.npz', arr_0, arr_1, arr_2, arr_3, arr_4, arr_5, arr_6 )

0
您现在肯定已经解决了这个问题(1年10个月后...),但我刚好遇到了同样的问题,并找到了一个值得在此分享的解决方案。
通常,如果您有一个.npz文件列表file_list = ['file_0.npz', 'file_1.npz', ...],最终也可能具有特定命名,即该文件是使用** kwargs而不仅仅是* args创建的,则可以执行以下操作:
import numpy as np

data_all = [np.load(fname) for fname in file_list]
merged_data = {}
for data in data_all:
    [merged_data.update({k: v}) for k, v in data.items()]
np.savez('new_file.npz', **merged_data)

我使用的是Python 3.7.7和Numpy 1.18.1。

谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接