首页 > 解决方案 > 将大型 Numpy 数组切片成单独的数组

问题描述

我有一个 (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 超出轴 0 的范围,大小为 1。” 在 hdfview 中演示的这些 25 X 25 阵列中输出 30000 个的解决方案有吗?

标签: pythonnumpyh5pyhdf

解决方案


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, :, :], 在第一个维度上选择一个项目。

我有一种感觉,你已经开始处理这些图像(用于机器学习或类似的东西),而没有学习太多pythonnumpy. 如果您只是按照可能有效的教程进行操作,但如果您偏离了该引导路径,您将迷失方向。

与您的第一篇文章同时发布的另h5py一篇 SO 帖子是相关的:

序列化和检索大量 numpy 数组的有效方法


推荐阅读