Ich versuche eine Binärdatei zu lesen, die aus mehreren Matrizen von Float-Zahlen besteht, die durch einen einzelnen int getrennt sind. Der Code in Matlab dies zu erreichen, ist die folgende:Mehrere Arrays in einer Binärdatei mit numpy lesen
fid1=fopen(fname1,'r');
for i=1:xx
Rstart= fread(fid1,1,'int32'); #read blank at the begining
ZZ1 = fread(fid1,[Nx Ny],'real*4'); #read z
Rend = fread(fid1,1,'int32'); #read blank at the end
end
Wie Sie sehen können, jede Matrixgröße ist Nx von Ny. Rstart und Rend sind nur Dummy-Werte. ZZ1 ist die Matrix mich interessiert
Ich versuche, das gleiche in Python zu tun, Sie folgendermaßen vorgehen:.
Rstart = np.fromfile(fname1,dtype='int32',count=1)
ZZ1 = np.fromfile(fname1,dtype='float32',count=Ny1*Nx1).reshape(Ny1,Nx1)
Rend = np.fromfile(fname1,dtype='int32',count=1)
Dann muss ich durchlaufen die nachfolgenden Matrizen zu lesen, aber die Funktion np.fromfile behält den Zeiger in der Datei nicht bei.
Eine weitere Option:
with open(fname1,'r') as f:
ZZ1=np.memmap(f, dtype='float32', mode='r', offset = 4,shape=(Ny1,Nx1))
plt.pcolor(ZZ1)
Dies funktioniert gut für das erste Array, aber nicht liest die nächsten Matrizen. Irgendeine Idee wie kann ich das tun?
Ich suchte nach ähnlichen Fragen, fand aber keine passende Antwort.
Danke
'numpy.fromfile' akzeptiert auch ein Dateiobjekt als erstes Argument. –
Perfekt. Genau das habe ich gesucht. Wichtig ist, dass die Datei im Binärmodus geöffnet wird, z. B. 'fid = open (fname, 'rb')'. Vielen Dank! – jcdoming