我正在使用先前生成的3D .h5文件并取出一个2D切片。新的2D .h5文件看起来完整且符合预期,但是当我将其传递到一些建模软件(GPRMax)中时,出现错误KeyError:“无法打开对象(对象'data'不存在)”。以前的2D和3D .h5文件都很好,所以我不确定有什么不同。以下是用于生成.h5文件的代码。感谢任何帮助。
hf = h5py.File(dir_path+'\ModelMC0105\ModelA3d1_15102020_170900005701.h5', 'r')
dset = hf['data']
if os.path.exists(dir_path+'\ModelMC0105\ModelA3d1_15102020_170900005701-slice.h5'):
os.remove(dir_path+'\ModelMC0105\ModelA3d1_15102020_170900005701-slice.h5')
hf2 = h5py.File(dir_path+'\ModelMC0105\ModelA3d1_15102020_170900005701-slice.h5','w')
dz_dy_dz = (0.001,0.001,0.001)
hf2.attrs['dx_dy_dz'] = dz_dy_dz
data = hf2.create_dataset("data", (100,1,100))
for i in range(100):
data[i]=(dset[i,50,:])
data=data.ref
print(data)
hf2.close()
hf.close()
(100,1,100)
和默认类型(float)的数据集。您读取的数据的形状是什么? (dset [i,50,:]
的形状?) 另外,在for
语句之后,您是否打算重新定义data
? (data=data.ref
) - kcw78for
循环中,您设置了data[i]=(dset[i,50,:])
。所以如果我理解正确,您会得到data[0]=(dset[0,50,0:100])
,data[1]=(dset[1,50,0:100])
。您确定您的切片大小匹配(从dset
到data
)吗? - kcw78hf['data']
和hf2['data']
的形状存在问题。如果不知道hf['data']
的形状,很难说。我写了一个简单的切片示例并发布为“答案”。也许它会有所帮助。顺便说一句,Gig' em Aggies! :-) - kcw78