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

步骤 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 分配给数组没有任何作用。为什么?

最佳答案

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

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

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

关于numpy - 为 NPZ 文件赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26408947/

10-13 07:13