1 回答
TA贡献1780条经验 获得超4个赞
问题在于你如何索引。要执行您想要的操作,您需要写入该项目[0,0,0](而不是[0][0][0])。以下代码执行您的意图:
import h5py
import numpy as np
file = h5py.File('myfile.h5', 'w')
file["myArray"] = np.arange(5*5*5).reshape(5,5,5)
print("old value is :", file["myArray"][0,0,0])
file["myArray"][0,0,0] = 100
print("new value is :", file["myArray"][0,0,0])
file.close()
(在您关闭/重新打开文件时也可以工作,为了清楚起见,我省略了该文件)。此代码输出:
old value is : 0
new value is : 100
请考虑Numpy 关于索引的文档以获取更多信息。
阅读文档后,您应该感到惊讶,您所做的并没有奏效。因为
A = np.arange(5*5*5).reshape(5,5,5)
A[0][0][0] = 100
print(A[0,0,0])
确实输出100。这是有效的,因为每次你都会[0]得到一个指向子数组(而不是副本)的指针。修改此子数组的条目从而修改基础数据(原始数组)。
我的猜测是,因为h5py写入光盘,[0]第一次获取确实返回一个副本(而此后返回一个指针)。这个怀疑在这个例子中得到证实:
import h5py
import numpy as np
file = h5py.File('myfile.h5', 'w')
file["myArray"] = np.arange(5*5*5).reshape(5,5,5)
data = file["myArray"][0]
data[0,0] = 100
print(data[0,0])
print(file["myArray"][0,0,0])
file.close()
哪个输出
100
0
添加回答
举报