【发布时间】:2020-08-13 23:00:45
【问题描述】:
我想从 hdf5 文件中获取格式为 {N, 16, 512, 128} 的数据集作为 4D numpy 数组。 N 是多个具有 {16, 512, 128} 格式的 3D 数组。 我尝试这样做:
import os
import sys
import h5py as h5
import numpy as np
import subprocess
import re
file_name = sys.argv[1]
path = sys.argv[2]
f = h5.File(file_name, 'r')
data = f[path]
print(data.shape) #{27270, 16, 512, 128}
print(data.dtype) #"<u4"
data = np.array(data, dtype=np.uint32)
print(data.shape)
不幸的是,在data = np.array(data, dtype=np.uint32) 命令之后似乎代码崩溃了,因为之后什么也没发生。
我需要将此数据集检索为一个 numpy 数组,或者可能是类似的 somthng 以进行进一步计算。 如果您有任何建议,请告诉我。
【问题讨论】:
-
data[:]产生什么?h5py也建议使用自己的astype:with dset.astype(...):out = dset[:] -
@hpaulj,你能解释一下你的问题吗?当被问及
data[:]生产什么时,你是什么意思?当我打印data[:]时发生了什么?在什么之后或之前?我做了prind(data),结果是<HDF5 dataset: shape (27270, 16, 512, 128), type "<u4"> -
data是一个h5py数据集对象。data[:]是一个 numpy 数组(通过首选但不仅限于语法)。 -
@hpaulj,好的,我明白了。同样,我不确定出了什么问题,但是没有发生任何事情,带有命令行的窗口没有改变
-
您可能不需要数组。
data = f[path]是一个 h5py 数据集对象,其行为类似于数组。如果你真的需要一个数组,请使用data_arr = f[path][:]——它会返回一个数组。没有充分的理由使用np.array()。区别:数组必须适合内存。对象没有相同的内存需求。
标签: python arrays numpy hdf5 h5py