h5py docsから、astype
データセットのメソッドを使用して、HDF データセットを別のタイプとしてキャストできることがわかります。これは、オンザフライで変換を実行する contextmanager を返します。
uint16
ただし、として保存されているデータセットを読み取り、それをfloat32
型にキャストしたいと思います。その後、キャストタイプとして別の関数でこのデータセットからさまざまなスライスを抽出したいと思い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を使用する派手な方法はありませんか?