为NPZ文件分配值

时间:2014-10-16 16:02:37

标签: numpy

有人可以向我解释为什么这不起作用:

步骤1)创建一个简单的NPZ文件

import numpy as np
a1 = np.zeros((3,2), dtype=np.double)
np.savez('npzfile.npz', field1=a1)

步骤2)打开NPZ文件并尝试为其分配值

npzfile = np.load('npzfile.npz')
npzfile['field1'][0,0] = 3.2
print npzfile['field1']

这给了我以下输出:

[[ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]]

换句话说,尝试将3.2分配给数组没有做任何事情。为什么呢?

2 个答案:

答案 0 :(得分:3)

看起来好像npzfile伪字典(实际上是numpy.lib.npyio.NpzFile)是不可写的。如果为数组设置单独的变量,则可以写入:

a = npzfile['field1']
a[0,0] = 3.2
print a

有趣的是,与正常数组np.may_share_memory(a, npzfile['field1'])不同,返回False,而如果设置b=a,则np.may_share_memory(a, b)会返回True。从npzfile伪dict中将field1数组提取到一个新变量中是创建一个副本,如果它是标准的numpy ndarray,这不是正常的行为。我不熟悉numpy.lib.npyio.NpzFile类型的内部,但我猜即使type(npzfile['field1'])ndarray,它的内存也会被区别对待。

答案 1 :(得分:0)

希望不要在这里说明太明显,但我从中创建dict

a = dict(npzfile)

现在您可以添加一个字典,然后将np.savez添加到文件中。我会假设这会将所有内容加载到内存中,这可能是您想要的也可能不是(基于@Saullo Castro上面的评论。)