gpt4 book ai didi

python - numpy package .npz 组件文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:47:01 24 4
gpt4 key购买 nike

如何在不删除之前数据的情况下将数据写入.npz文件?

我正在使用 python numpy 包,我在其中使用 savez() 来保存变量。

但是,每次我将信息保存到文件时,它都会删除以前的信息。例如,假设我有

savez('file',a=a)

那么如果我用

savez('file',b=b)

它将删除整个文件并

load('file.npz').keys()

只会返回'b'。

是否有任何选项可以简单地将变量“追加”到文件中并删除文件?即是否有任何方法可以简单地添加一个参数,如 'append=true' 以便它

savez('file',b=b,'append=true')

不会删除“a”吗?

最佳答案

np.savez 创建一个 zip 存档。虽然这样的存档可以在附加模式下打开,但 savez 不提供该选项(也就是说,它没有记录,代码也没有隐藏)。

但是 savez 使用 np.save 创建组件文件(从技术上讲,调用级别降低了几个),并将它们打包到 zip .所以我们可以自己做。

In [744]: import zipfile

In [746]: a=np.arange(10)
In [747]: b=np.zeros((10,10))
In [748]: np.savez('test.npz', a=a, b=b)

使用zipfile 或操作系统工具查看压缩包:

In [750]: f = zipfile.ZipFile('test.npz', mode='a')  # note append mode
In [751]: f.infolist()
Out[751]:
[<ZipInfo filename='b.npy' filemode='-rw-------' file_size=928>,
<ZipInfo filename='a.npy' filemode='-rw-------' file_size=168>]

现在保存另一个数组,并使用zipfile 写入:

In [752]: np.save('c.npy',np.ones((2,3)))
In [753]: f.write('c.npy')
In [754]: f.infolist()
Out[754]:
[<ZipInfo filename='b.npy' filemode='-rw-------' file_size=928>,
<ZipInfo filename='a.npy' filemode='-rw-------' file_size=168>,
<ZipInfo filename='c.npy' filemode='-rw-rw-r--' file_size=176>]
In [755]: f.close()

使用加载进行测试:

In [757]: d = np.load('test.npz')
In [758]: list(d.keys())
Out[758]: ['b', 'a', 'c']
In [759]: d['c']
Out[759]:
array([[1., 1., 1.],
[1., 1., 1.]])

所以 ab 是在初始调用中添加的,而 c 是后来添加的。 c.npy 文件仍然存在于目录中。那可以删除。

简而言之,np.savez 是一种通过一次调用保存多个数组的简单方法。在使用 zipfile 时,它不会直接访问其所有的灵 active ,例如附加或更新文件。如果您想要这种灵 active ,请直接使用 np.savezipfile

关于python - numpy package .npz 组件文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com