如何解决将 HDF5 文件中的字符串数据转换为浮点格式
我需要将字符串数据从 HDF5 文件转换为浮点格式,以便在具有 l b 坐标的 Skyplot (Astropy) 中使用。数据在这里: https://wwwmpa.mpa-garching.mpg.de/~ensslin/research/data/faraday2020.html (法拉第天空 2020)
到目前为止我编写的代码是:
from astropy import units as u
from astropy.coordinates import SkyCoord
import matplotlib.pyplot as plt
import numpy as np
import h5py
dat = []
ggl=[]
ggb=[]
f1= h5py.File('/home/nikita/faraday_2020/faraday2020.hdf5','r')
data = f1.get('faraday_sky_mean')
faraday_sky_mean = np.array(data)
data1 = f1.get('faraday_sky_std')
faraday_sky_std = np.array(data1)
n1 = 0
for line in f1:
s = line.split()
dat.append(s)
n1 = n1 +1
#
for i in range(0,n1):
ggl.append(float(dat[i][0])) # galactic coordinates input
ggb.append(float(dat[i][1]))
f1.close()
但是我收到错误:
ggl.append(float(dat[i][0])) # galactic coordinates input
ValueError: could not convert string to float: 'faraday_sky_mean'
请帮忙解决这个问题。谢谢。
解决方法
你问什么和你需要什么(我认为)是两件不同的事情。
这一行不是读取 HDF5 文件的方式:for line in f1:
您需要使用 HDF5 API 来读取它(h5py 是其中之一)。
我认为您想读取数据集 faraday_sky_mean
和 faraday_sky_std
并将数组加载到列表 ggl
和 ggb
中。为此,请使用此代码。它将创建 2 个列表,每个列表有 3145728 个 float64 值。
with h5py.File('faraday2020.hdf5','r') as hdf:
print(list(hdf.keys()))
faraday_sky_mean = hdf['faraday_sky_mean'][:]
faraday_sky_std = hdf['faraday_sky_std'][:]
print(faraday_sky_mean.shape,faraday_sky_mean.dtype)
print(f'Max Mean={max(faraday_sky_mean)},Min Mean={min(faraday_sky_mean)}')
print(faraday_sky_std.shape,faraday_sky_std.dtype)
print(f'Max StdDev={max(faraday_sky_std)},Min StdDev={min(faraday_sky_std)}')
ggl = faraday_sky_mean.tolist()
print(len(ggl),type(ggl[0]))
ggb = faraday_sky_std.tolist()
print(len(ggb),type(ggb[0]))
上述过程将数据保存为 NumPy 数组和 Python 列表。如果你只需要列表(不需要数组),你可以缩短代码如下:
with h5py.File('faraday2020.hdf5','r') as hdf:
ggl = hdf['faraday_sky_mean'][:].tolist()
print(len(ggl),type(ggl[0]))
ggb = hdf['faraday_sky_std'][:].tolist()
print(len(ggb),type(ggb[0]))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。