将大型Numpy阵列切成单个阵列

时间:2018-11-01 02:16:48

标签: python numpy h5py hdf

我有一个(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个?

2 个答案:

答案 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维上选择一个项目。

我觉得您已经开始处理这些图像(用于机器学习或类似的东西),而没有学到很多pythonnumpy。如果您只是在遵循一个可能有效的教程,但是如果您偏离该指导路径,将会迷失方向。

与您的第一个同时发布的另外h5py条SO相关信息:

Efficient way of serializing and retrieving a large number of numpy arrays

答案 1 :(得分:0)

对不起,我似乎通过添加不必要的切片来使它复杂化。我对numpy略有陌生,因此我将对其进行详细了解以避免出现问题。再次感谢大家的宝贵时间。