2016-10-18 8 views
0

matioライブラリを使用して、std::vector<std::vector<std::vector<double>>>の内容とその他のデータをMatLabファイルに書き込みます。私はここでチュートリアルを使用しました:http://na-wiki.csc.kth.se/mediawiki/index.php/MatIOC++でmatioを使用しているときにMat_Openが動作しない

Mat_Openは、NULLのままです。これは、ファイルに何も書き込めないことを意味します。エラーメッセージはありません。リンク/コンパイルは正常です。Saving mat fileは決して印刷されず、プログラムの終了コードは0です。私は明白な何かを欠いていますかMATLABファイルを作成する必要があります機能の

内容:

mat_t *mat; 
matvar_t *matvar; 
unsigned long dims[3] = {100, 100, 3}; 
unsigned long single_dim[1] = {1}; 
unsigned long size = 100; 
double number = 3.14; 

mat = Mat_Open("/home/ruben/data.mat", MAT_ACC_RDWR); 

if(mat != NULL) { 
    std::cout << "Saving mat file" << std::endl; 
    matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 3, dims, matrix, 0); 
    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB); 
    Mat_VarFree(matvar); 

    matvar = Mat_VarCreate("number", MAT_C_DOUBLE, MAT_T_DOUBLE, 1, single_dim, &number, 0); 
    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB); 
    Mat_VarFree(matvar); 

    Mat_Close(mat); 
} 

私は#include <matio.h>を使用してライブラリが含まれ、-std=c++11 -L/usr/lib -lmatio -lzとリンク。どんな助けもありがとうございます。

編集:私は、GitHubの上でプロジェクトを発見した問題としてこれを提出:プロジェクトの著者のいくつかの助けを借りて、https://github.com/tbeu/matio/issues/45

答えて

0

私は解決策を自分自身を発見しました。 2つのことは間違っているつもりだった:

  1. をMATLABファイルがまだ存在していない場合は、1がMat_CreateまたはMat_CreateVerを使用する必要があります。
  2. std::vector要素は、単に関数Mat_VarCreateの引数として使用できません。代わりに、最初の要素へのポインタを渡す必要があります。

更新作業コード:これは誰かに有用であろう

mat_t *mat; 
matvar_t *matvar; 
unsigned long dims[3] = {100, 100, 3}; 
unsigned long single_dim[1] = {1}; 
unsigned long size = 100; 
double number = 3.14; 

mat = Mat_Create("/home/ruben/data.mat", NULL); 

if(mat != NULL) { 
    std::cout << "Saving mat file" << std::endl; 
    matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 3, dims, &matrix->at(0), 0); 
    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB); 
    Mat_VarFree(matvar); 

    matvar = Mat_VarCreate("number", MAT_C_DOUBLE, MAT_T_DOUBLE, 1, single_dim, &number, 0); 
    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB); 
    Mat_VarFree(matvar); 

    Mat_Close(mat); 
} 

希望。