Ersetzen Sie die Tabelle in der HDF5-Datei durch eine geänderte TabellePython

Python-Programme
Guest
 Ersetzen Sie die Tabelle in der HDF5-Datei durch eine geänderte Tabelle

Post by Guest »

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:

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
Dieser Code führt jedoch bei der Ausführung zu folgendem Fehler:

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
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

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 ) }
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post