Нарезка большого массива Numpy на отдельные массивы - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть hdf-файл измерений (30000, 25, 25), и я уже преобразовал его в массив с кодом ниже:

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». Есть ли решение для вывода 30000 из этих 25 X 25 массивов, продемонстрированных в hdfview?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Извините, ребята, похоже, я только что усложнил это, добавив ненужные нарезки. Я немного незнаком с NumPy, поэтому я узнаю больше об этом, чтобы избежать проблем. Спасибо всем еще раз за ваше время.

0 голосов
/ 01 ноября 2018
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 ТАК пост от того же самого времени, что и ваш первый:

Эффективный способ сериализации и извлечения большого количества массивов numpy

...