从h5py 文档中,我看到我可以使用数据集的astype
方法将 HDF 数据集转换为另一种类型。这会返回一个上下文管理器,它会即时执行转换。
但是,我想读取存储为的数据集uint16
,然后将其转换为float32
类型。此后,我想以与 cast type 不同的函数从该数据集中提取各种切片float32
。文档将用途解释为
with dataset.astype('float32'):
castdata = dataset[:]
这将导致整个数据集被读入并转换为float32
,这不是我想要的。我想引用数据集,但float32
转换为numpy.astype
. 如何创建对.astype('float32')
对象的引用,以便可以将其传递给另一个函数以供使用?
一个例子:
import h5py as HDF
import numpy as np
intdata = (100*np.random.random(10)).astype('uint16')
# create the HDF dataset
def get_dataset_as_float():
hf = HDF.File('data.h5', 'w')
d = hf.create_dataset('data', data=intdata)
print(d.dtype)
# uint16
with d.astype('float32'):
# This won't work since the context expires. Returns a uint16 dataset reference
return d
# this works but causes the entire dataset to be read & converted
# with d.astype('float32'):
# return d[:]
此外,似乎 astype 上下文仅在访问数据元素时才适用。这意味着
def use_data():
d = get_data_as_float()
# this is a uint16 dataset
# try to use it as a float32
with d.astype('float32'):
print(np.max(d)) # --> output is uint16
print(np.max(d[:])) # --> output is float32, but entire data is loaded
那么没有使用 astype 的 numpy-esque 方式吗?