Я пытаюсь импортировать набор данных MNIST в Python следующим образом:
import h5py
f = h5py.File("mnist.h5")
x_test = f["x_test"]
x_train = f["x_train"]
y_test = f["y_test"]
y_train = f["y_train"]
тип say, y_train говорит h5py._hl.dataset.Dataset
Я хочу преобразовать их в float для математического удобства. Я пробую это:
D = x_train.astype(float)
y_train = y_train.astype(float)+np.ones((60000,1));
но я получаю эту трассировку:
Traceback (most recent call last):
File "<ipython-input-14-f3677d523d45>", line 1, in <module>
y_train = y_train.astype(float)+np.ones((60000,1));
TypeError: unsupported operand type(s) for +: 'AstypeContext' and 'float'
Где я пропадаю? Благодарю.
Вы используете две разные библиотеки, которые имеют два совершенно разных значения для astype
.
Если вы делаете это в numpy
, что-то вроде этого работает:
a = np.array([1, 2, 3])
a = a.astype(float) + np.ones((60000,1))
Но в h5py астепи есть другая функция и предназначена для использования в менеджере контекста:
Это вызовет ту же ошибку, что и вы:
import h5py
f = h5py.File('mytestfile.hdf5', 'w')
dset = f.create_dataset("default", (100,))
dset.astype(float) + np.ones((60000,1))
Но приведенный ниже код будет работать (см. Astype в h5py docs):
f = h5py.File('mytestfile.hdf5', 'w')
dset = f.create_dataset("default", (100,))
with dset.astype('float'):
out = dset[:]
out += np.ones((100,))
Эта проблема аналогична созданию ссылки на набор данных HDF в H5py с использованием астипа