我有一个(30000、25、25)维hdf文件,并已使用以下代码将其转换为numpy数组:
import numpy as np
import h5py
hf = h5py.File('data.h5', 'r')
n1 = np.array(hf["image"][:])
x = n1[0:625:30000]
print(x)
在hdfview中,更改尺寸后,我能够创建30000个单独的25 X 25阵列。但是,使用上面的代码,我只能打开第一个数组。下面的代码能够显示第一个数组:
import numpy as np
import h5py
hf = h5py.File('data.h5', 'r')
n1 = np.array(hf["image"][:])
x[0] = n1[0:625:30000]
print(x)
当我将x[0]
更改为x[1]
或更高时,它说-“索引1超出了尺寸1的轴0的范围。”有没有解决方案来输出hdfview中演示的这25 X 25阵列中的30000个?
答案 0 :(得分:0)
n1 = hf["image"][:]
就足够了。它是一个numpy数组。无需再次将其包装在np.array(...)
中。
x = n1[0:625:30000]
没有任何意义。在Python中,切片为[start:stop:step]
。
x = n1[::625]
将返回第625个元素的子集(在第一个维度上)。
'x = n1 [0] is the first (25,25) block (or image).
x = n1 [1]秒。
在numpy
中索引n1[0]
等同于n1[0, :, :]
,在第1维上选择一个项目。
我觉得您已经开始处理这些图像(用于机器学习或类似的东西),而没有学到很多python
或numpy
。如果您只是在遵循一个可能有效的教程,但是如果您偏离该指导路径,将会迷失方向。
与您的第一个同时发布的另外h5py
条SO相关信息:
Efficient way of serializing and retrieving a large number of numpy arrays
答案 1 :(得分:0)
对不起,我似乎通过添加不必要的切片来使它复杂化。我对numpy略有陌生,因此我将对其进行详细了解以避免出现问题。再次感谢大家的宝贵时间。