Во время игры с пакетом HDF5 для Python я обнаружил странное поведение. Я хочу вставить больше данных в таблицу. Но почему-то я не могу заставить его работать должным образом. Как вы можете видеть из исходного кода, я получаю последнюю строку данных в ключе 'X', используя fromRow = hf["X"].shape[0]
и записываю tempArray2
впоследствии. Результатом является пустая таблица.
import h5py
tempArray1 = [[0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443], [0.9293237924575806, -0.32789671421051025, 0.18110771477222443]]
tempArray2 = [[3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14], [3.1387749004352372e-06, 8.120089097236803e+27, -1.645612730013634e-14]]
with h5py.File('data.hdf5', 'w') as hf:
# Add data to new file
dset = hf.create_dataset("X", data=tempArray1, compression="gzip", chunks=True, maxshape=(None,3), dtype='f4') # Size is as the size of tempArray1
print(hf["X"].shape[0])
# Append data existing file
hf["X"].resize((hf["X"].shape[0] + 10, 3)) # Size is as the size of X+ 10
print(hf["X"].shape[0])
fromRow = hf["X"].shape[0]
hf["X"][fromRow:] = tempArray2
Вот как это выглядит:
Key: X
Data:
[[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0.9293238 -0.3278967 0.18110771]
[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]]
Length of data: 20
Как ни странно, когда я заменяю значение fromRow
на число 10, подобное fromRow = 10
, которое представляет конец существующей таблицы, все работает.
Вывод:
Key: X
Data:
[[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 9.2932379e-01 -3.2789671e-01 1.8110771e-01]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]
[ 3.1387749e-06 8.1200891e+27 -1.6456127e-14]]
Length of data: 20
Есть идеи, что я делаю не так?