h5py使用报错:'Dataset'对象无'value'属性,替代方案运行异常求助
h5py 3.x版本.value属性报错解决方案
根本原因
h5py从3.0版本开始正式废弃并移除了.value属性,你查询到的信息是正确的,教程代码可运行是因为作者使用的是2.x版本的h5py,该版本还保留了.value属性的兼容支持。
分场景修正代码
你后续遇到的两个问题,分别对应元数据、高光谱数据两类不同的数据集读取场景,分开处理即可:
1. 读取小体量元数据(map info、wavelength)
这类数据为标量、字符串或短一维数组,直接用[()]替代.value即可,不会出现卡顿:
# 若读取结果为字节串,追加.decode('utf-8')转为普通字符串 metadata['map info'] = refl['Metadata']['Coordinate_System']['Map_Info'][()].decode('utf-8') metadata['wavelength'] = refl['Metadata']['Spectral_Data']['Wavelength'][()]
2. 读取Reflectance_Data高光谱数组
你遇到的报错、卡顿、空白图问题均是该场景下的常见问题,对应处理方式如下:
[:]报错:标量数据空间切片非法
优先检查你读取的路径是否正确,正常Neon高光谱反射率数据为三维数组(波段数行数列数),出现该报错说明你当前指向的数据集不是反射率数组,而是标量属性,确认sitename拼写、数据集层级是否正确即可解决。[()]卡顿30秒
单块Neon高光谱瓦片数据体量可达数百MB,[()]会将全量数据加载到内存,出现卡顿属于正常情况。如果不需要用到所有波段,建议按需切片读取,大幅降低加载耗时:# 示例:仅读取第20个波段的二维数组 refl_band = refl['Reflectance_Data'][20, :, :]- 输出空白matplotlib图
该问题和h5py读取无关,是原始数据预处理不到位导致:
Neon反射率原始值默认乘以了10000的缩放因子,且填充值为-9999,直接绘图时数值范围远超过matplotlib色阶的默认范围,就会出现全白的情况,预处理代码示例:import numpy as np # 替换填充值为空值 refl_band[refl_band == -9999] = np.nan # 应用缩放因子还原真实反射率 refl_band = refl_band * 0.0001 # 此时再绘图即可得到正常结果
内容的提问来源于stack exchange,提问作者Renaissance Man
相关产品推荐
相关产品推荐

