Lesen und Schreiben von / in eine binäre Datei in Matlab
Frage
Mein Wissen von Matlab ist lediglich auf der Notwendigkeit Basis zu wissen, so ist dies wahrscheinlich eine elementare Frage. Trotzdem hier kommt es:
Ich habe eine Datei mit Daten bekommt (16-Bit-Integer) im binären Format gespeichert. Wie kann ich es in einen Vektor / ein Array in Matlab lesen? Wie kann ich diese Daten in eine Datei in Matlab schreiben? Gibt es eine intelligente zwicken die Leistung Geschwindigkeit beim Lesen / Schreiben eine riesige Menge an Daten (Gigabyte)?
zu erhöhenLösung
Wie Bill the Lizard schrieb Sie können fread verwenden, um die Daten in einen Vektor zu laden. Ich möchte nur ein wenig auf seine Antwort erweitern.
Lesen von Daten
>> fid=fopen('data.bin','rb') % opens the file for reading
>> A = fread(fid, count, 'int16') % reads _count_ elements and stores them in A.
Die Befehle fopen und fread default auf Little-Endian [1] Codierung für die ganzen Zahlen. Wenn Ihre Datei Big-Endian codiert ist, müssen Sie die fread
ändern>> A = fread(fid, count, 'int16', 'ieee-be');
Auch, wenn Sie den gesamten Dateisatz lesen
>> count=inf;
und wenn Sie möchten, um die Daten in Matrix lesen mit n Spalten verwenden
>> count=[n inf];
Schreiben von Daten
Wie für die Daten in eine Datei Witting. Der Befehl, Fwrite in Bills Antwort wird in eine binäre Datei schreiben. Wenn Sie die Daten in eine Textdatei schreiben möchten, können Sie mit dlmwrite
>> dlmwrite('data.csv',A,',');
Referenzen
[1] http://en.wikipedia.org/wiki/Endianness
Update
-
Das Maschinenformat (IE, ieee-sein , ieee-le vaxd etc.) der binären Daten können entweder in die angegeben werden fopen oder die fread Befehle in Matlab. Details zu den unterstützten Maschinenformat finden Sie in Matlab Dokumentation von fopen .
-
Scott Französisch des Kommentar zu Bills beantworten schlägt vor, die Daten in ein Lese int16 variabel. Um diese Anwendung zu tun
>> A = int16(fread(fid,count,precision,machineFormat));
Dabei steht count ist die Größe / Form die Daten zu lesen, Genauigkeit ist das Datenformat, und machineformat ist die Codierung jedes Byte.
-
Siehe Befehle fseek um die Datei zu bewegen. Zum Beispiel:
>> fseek(fid,0,'bof');
wird die Datei an den Anfang zurück, wobei bof steht für Anfang der Datei .
Andere Tipps
Angenommen, Sie wissen, wie viele Werte, die Sie in der Datei gespeichert haben, können Sie so etwas wie dies tun, um die Daten in ein Array zu lesen.
fid = fopen('data.bin','rb')
A = fread(fid, count, 'int16')
Daten zu schreiben, um diese in eine Datei tun:
fid = fopen('data.bin','w')
count = fwrite(fid, A, 'int16')
Die fwrite Funktion gibt die Anzahl der Elemente (nicht Bytes) in die Datei geschrieben.
Was die Performance-Tuning geht, können Sie Daten in Blöcken lesen nur so viel zu verwenden, wie Sie verarbeiten müssen. Dies ist das gleiche in jeder Sprache, und es gibt keine Möglichkeit, es zu beschleunigen, das ist spezifisch für Matlab.
Normalerweise hasse ich sehen, Links in einer Antwort, aber das sieht ziemlich nahe:
http://www.mathworks.com/support/tech -notes / 1400 / 1403.html
In Bezug auf den zweiten Teil des Performance-Tuning, es ist 6 Jahre her, seit ich Matlab verwendet habe, so dass ich weiß es nicht.
HTH