有人可以向我解释为什么这不起作用:
步骤 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=a
, np.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/