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öhen
War es hilfreich?

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

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

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top