2017-07-03 3 views
1

Ich bin derzeit Cross-Compiling auf dem BeagleBone Black in einer Visual Studio-Umgebung mit Armadillo, um MATLAB-Code in C++ zu übersetzen.Armadillo lesen MAT Datei Fehler

Dies ist ein Signalverarbeitungsprojekt, also brauche ich eine Möglichkeit, binäre Datendateien, insbesondere .mat-Dateien, zu lesen und zu schreiben. Zum Glück, die Gürteltier-Dokumentation sagt, dass Sie .mat-Dateien direkt in eine Matrix mit laden können.

Ich habe versucht, dass zunächst, aber es scheint wie es nicht die Datei richtig liest, noch liest es alle Einträge . Meine Referenzdatei ist eine 2000x6-Matrix und die erstellte Armadillo-Matrix ist 5298x1. Ich weiß, dass es ohne einen Gürteltier nachahmenden Header in einen Spaltenvektor umgewandelt wird, und ich muss es mit .reshape() umformen, aber es erhält einfach nicht alle Einträge und durch Inspektion die Einträge, die es gemacht hat Lesen ist falsch.

Ich bin mir nicht sicher, was das Problem ist. Ich habe die Datenreferenzmat-Dateien in den Debug-Ordner für das Remote-Projekt auf der BBB platziert, wo die .out kompilierte Datei erstellt wird. Gibt es einen anderen Weg, den ich integrieren sollte?

Auch, helfen mit dem Armadillo-Header oder andere Vorschläge nachzuahmen sind willkommen. Wenn Sie etwas brauchen, lassen Sie es mich wissen. Hier

ist das Prüfprogramm Ich verwende:

#include <iostream> 
#include <armadillo> 

using namespace std; 
using namespace arma; 

int main() 
{ 
mat data_ref; 

data_ref.load("Epoxy_6A_Healthy_Output_200kHz_Act1_001.mat"); 

cout << "For Data_ref, there are " << data_ref.n_cols << " columns and " << data_ref.n_rows << " rows.\n"; 
cout << "First item: " << data_ref(0) << "\n6th item: " << data_ref(6) << "\n2000th item: " << data_ref(2000); 

data_ref.reshape(2000, 6); 

cout << "For Data_ref, there are " << data_ref.n_cols << " columns and " << data_ref.n_rows << " rows.\n"; 
cout << "First item: " << data_ref(0,0) << "\nLast Item: " << data_ref(1999,5); 

cout << "\nDone"; 

return 0; 
} 

Das erste Element in der .mat Datei ist 0,0, und das letzte Element ist 0,0014. Hier ist der Ausgang.

For Data_ref, there are 1 columns and 5298 rows. 
First item: 8.48749e-53 
th item: 9.80727e+256 
th item: -2.4474e+238For Data_ref, there are 6 columns and 2000 rows. 
First item: 8.48749e-53 
(gdb) 1028-var-list-children --simple-values "var4.public" 0 1000 
(gdb) 1030-var-list-children --simple-values "var4.arma::Base<double, 
arma::Mat<double> >" 0 1000 
Last Item: 0 
Done=thread-exited,id="1",group-id="i1" 
The program '' has exited with code 0 (0x0). 

Dank

+0

Sie sollten [MCVE] mit dem Code angeben, der zum Laden der Matrix, der Eingabematrix, Ihrer Ausgabe und der erwarteten Ausgabe verwendet wird – Rama

Antwort

1

Armadillo unterstützt .mat Format nicht Matlab. In der Dokumentation beziehen sie sich auf das Armadillo mat Binärformat. Sie können jedoch die Daten in Matlab mit dem hdf5 Binärformat speichern und in Armadillo importieren, aber dann müssen Sie die hdf5 lib herunterladen und Armadillo neu konfigurieren. Siehe Abschnitt hdf5_binary in der Dokumentation.