Я хочу изменить форму моего набора данных h5py, как я могу сделать с помощью numpy.reshape(). Следующий код работает, только если я использую numpy.array() в начале кода. Но это работает только с небольшим набором данных и взрывает мою память, если я возьму больший.
import h5py
import numpy as np
#load data
h5py_data_path = 'any\path\to\h5pyData\training.data.h5'
t_data = h5py.File(h5py_data_path,'r')
training_data = t_data['training.data']
######################################
#### Don't want to have this (blows up my memory) ####
training_data = np.array(training_data)
######################################
print('training_data ',training_data.shape)
#out: training_data (10203, 5, 341)
#reshape data
######################################
#### That works, but only with upper Numpy Code ####
training_data = training_data.reshape(training_data.shape[0], 1, 5, 341)
######################################
print('training_data ',training_data.shape)
#out: training_data (10203, 1, 5, 341)
Есть ли в h5py какой-либо собственный способ изменить это любым другим рабочим способом?
h5py
документов вы не понимаете? - person hpaulj   schedule 17.05.2019training_data[0:n]
загружает фрагмент набора данных в память. - person hpaulj   schedule 17.05.2019.reshape()
не существует. Однако есть метод.resize()
для добавления к существующему набору данных. Когда вы получаете доступ к набору данных в виде массива numpy, вы получаете представление (в памяти) данных на диске. В вашем примере вы добавляете измерение в массив (от (10203, 5, 341) до (10203, 1, 5, 341)). Каковы ваши намерения? Если вам действительно нужно изменить данные для обучения, вы можете прочитать набор данных, изменить его форму и записать в новый набор данных. Новый набор данных может идти как в текущем файле, так и в новом. - person kcw78   schedule 17.05.2019.value
устарело в h5py. Рекомендуемый метод теперь похож на нарезку массива numpy:training_data = t_data['training_data'][:]
(для доступа ко всему массиву). Он примет метод .reshape(). - person kcw78   schedule 17.05.2019np.array(dataset)
использует больше памяти, чемdataset.value
илиdataset[:]
.np.array(dataset)
может загружаться так же, какvalue
, а затем сделать его копию (а затем удалить исходную загрузку).np.asarray(dataset)
было бы лучше, но все равно не нужно. - person hpaulj   schedule 18.05.2019