Ersetzen Sie die Tabelle in der HDF5-Datei durch eine geänderte Tabelle
Posted: 05 Jan 2025, 16:49
Ich habe eine vorhandene HDF5-Datei mit mehreren Tabellen. Ich möchte diese HDF5-Datei ändern: In einer der Tabellen möchte ich einige Zeilen vollständig löschen und Werte in den verbleibenden Zeilen ändern.
Ich habe den folgenden Code ausprobiert:
Dieser Code führt jedoch bei der Ausführung zu folgendem Fehler:
Eines der Probleme scheint also zu sein, dass das Numpy-Array arr, das ich erstellt habe, kein zweidimensionales Array ist. Allerdings weiß ich nicht genau, wie man aus der HDF5-Tabelle ein zweidimensionales Array erstellt (oder ob das hier überhaupt der beste Ansatz ist).
Könnte hier jemand helfen? Mich auf den richtigen Weg gebracht?
Bearbeiten
Die Ausgabe von h5dump für meinen Datensatz ist wie folgt
Ich habe den folgenden Code ausprobiert:
Code: Select all
import h5py
import numpy as np
with h5py.File("my_file.h5", "r+") as f:
# Get array
table = f["/NASTRAN/RESULT/ELEMENTAL/STRESS/QUAD4_COMP_CPLX"]
arr = np.array(table)
# Modify array
arr = arr[arr[:, 1] == 2]
arr[:, 1] = 1
# Write array back
table[...] = arr
Code: Select all
Traceback (most recent call last):
File "C:\_Work\test.py", line 10, in
arr[arr[:, 1] == 2]
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
Könnte hier jemand helfen? Mich auf den richtigen Weg gebracht?
Bearbeiten
Die Ausgabe von h5dump für meinen Datensatz ist wie folgt
Code: Select all
HDF5 "C:\_Work\my_file.h5" {
DATASET "/NASTRAN/RESULT/ELEMENTAL/STRESS/QUAD4_COMP_CPLX" {
DATATYPE H5T_COMPOUND {
H5T_STD_I64LE "EID";
H5T_STD_I64LE "PLY";
H5T_IEEE_F64LE "X1R";
H5T_IEEE_F64LE "Y1R";
H5T_IEEE_F64LE "T1R";
H5T_IEEE_F64LE "L1R";
H5T_IEEE_F64LE "L2R";
H5T_IEEE_F64LE "X1I";
H5T_IEEE_F64LE "Y1I";
H5T_IEEE_F64LE "T1I";
H5T_IEEE_F64LE "L1I";
H5T_IEEE_F64LE "L2I";
H5T_STD_I64LE "DOMAIN_ID";
}
DATASPACE SIMPLE { ( 990 ) / ( H5S_UNLIMITED ) }
ATTRIBUTE "version" {
DATATYPE H5T_STD_I64LE
DATASPACE SIMPLE { ( 1 ) / ( 1 ) }
}
}
}