如何将数组附加到现有的".npz"文件中?



我有以下代码,它生成mat文件(.npz格式(:

import numpy as np
x = np.arange(10)
np.savez('mat',x)

现在我想将另一个数组附加到现有文件中:

y = np.arange(21)
np.savez('mat',y) 

但是,它用 y 替换了 x 数组。 我想在文件中同时包含这两个数组。此外,我不想同时将它们写入文件。

我以帖子上的评论为起点,以下代码似乎可以满足您的需求。(我只使用 python 3.6 和基本模块,它可能适用于其他 python 版本(

import zipfile
import io
import os
import numpy as np
test_np1 = np.random.random(100)
test_np2 = np.random.random(100)
# initial file
filename = 'npfile.npz'
try:
np.savez_compressed(filename, test_np1=test_np1)
with np.load(filename) as loaded_npz:
print(np.array_equal(test_np1, loaded_npz['test_np1']))
bio = io.BytesIO()
np.save(bio, test_np2)
with zipfile.ZipFile(filename, 'a') as zipf:
# careful, the file below must be .npy
zipf.writestr('test_np2.npy', data=bio.getbuffer().tobytes())
with np.load(filename) as loaded_npz:
print(np.array_equal(test_np1, loaded_npz['test_np1']))
print(np.array_equal(test_np2, loaded_npz['test_np2']))
finally:
os.remove(filename)

步骤1:创建您的第一个文件

d = np.arange(10)
np.savez("mat",x = d)  # do not forget to name your variable d

Step2:读取你的文件,将其转换为字典对象,将你的新变量添加到字典中,最后用这个字典覆盖你的mat.npz

data = np.load("mat.npz")
data = dict(data)
data["y"] = np.arange(21)
np.savez("mat",**data)

第 3 步:验证最后一个变量是否已添加到mat.npz文件中。

data = np.load("mat.npz")
print(data[x])   # [0 1 2 3 4 5 6 7 8 9]
print(data[y])   # [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20]

这里不是一个真正的解决方案,但我想分享一种将数组添加到新 nyz 文件的方法。

import numpy as np
array_dict = {'new_array': new_array}
for k in old_npz_file:
array_dict[k] = old_npz_file[k]
np.savez(file_path, **array_dict)

我想你可以说这是"添加"数组的一种方法。

最新更新