Проблема в том, как вы индексируете.Чтобы сделать то, что вы хотите, вы хотите написать в элемент [0,0,0]
(а не [0][0][0]
).Следующий код выполняет то, что вы хотели:
import h5py
import numpy as np
file = h5py.File('myfile.h5', 'w')
file["myArray"] = np.arange(5*5*5).reshape(5,5,5)
print("old value is :", file["myArray"][0,0,0])
file["myArray"][0,0,0] = 100
print("new value is :", file["myArray"][0,0,0])
file.close()
(также работает при закрытии / повторном открытии файла, который я для ясности пропустил).Этот код выводит:
old value is : 0
new value is : 100
Пожалуйста, рассмотрите документацию Numpy по индексированию , чтобы получить больше информации.
После прочтения документации вас должно удивить, что то, что вы сделали, не сработало.Потому что
A = np.arange(5*5*5).reshape(5,5,5)
A[0][0][0] = 100
print(A[0,0,0])
выводит 100
.Это работает, потому что каждый раз, когда вы делаете [0]
, вы получаете указатель на подмассив (а не копию).Таким образом, изменение записей этого подмассива изменяет базовые данные (исходный массив).
Я предполагаю, что, поскольку h5py
записывает на диск, получение [0]
в первый раз возвращает копию (в то время как после этого возвращается указатель).Это подозрение подтверждается в этом примере:
import h5py
import numpy as np
file = h5py.File('myfile.h5', 'w')
file["myArray"] = np.arange(5*5*5).reshape(5,5,5)
data = file["myArray"][0]
data[0,0] = 100
print(data[0,0])
print(file["myArray"][0,0,0])
file.close()
, который выводит
100
0