私は2つのベクトルをプロットしようとしています。私はの2つの要素を(Visual C++コンパイラを使用して)保存していました。Mxarraysを持つ2つのベクトルをC++コンパイラにプロット
test1
およびtest2
は、MATファイルのmxArray
で、印刷すると問題ありません。しかし、私はプログラムを実行すると、数字は空白です。以下の手順
memcpy((vector<double> *)mxGetPr(T), (vector<double>*) &v, sizeof(v));
memcpy((vector<double> *)mxGetPr(D), (vector<double>*) &v1, sizeof(v1));
で
#include "mat.h"
#include "NoneDynamic.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <engine.h>
using namespace std;
mxArray *T = NULL, *D = NULL;
Engine *ep;
void matread(const char *file, std::vector<double>& v)
{
// open MAT-file
MATFile *pmat = matOpen("DataTesting.mat", "r");
if (pmat == NULL) return;
// extract the specified variable
mxArray *arr = matGetVariable(pmat, file);
if (arr != NULL && mxIsDouble(arr) && !mxIsEmpty(arr)) {
// copy data
mwSize num = mxGetNumberOfElements(arr);
double *pr = mxGetPr(arr);
if (pr != NULL) {
v.resize(num);
v.assign(pr, pr + num);
}
}
// cleanup
mxDestroyArray(arr);
matClose(pmat);
}
int main()
{
SeenData object;
vector<double> v;
matread("Test1", v);
vector <double> v1;
matread("test2", v1);
if (!(ep = engOpen(""))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
T = mxCreateDoubleMatrix(1,100, mxREAL);
memcpy((vector<double> *)mxGetPr(T), (vector<double>*) &v, sizeof(v));
D = mxCreateDoubleMatrix(1,100, mxREAL);
memcpy((vector<double> *)mxGetPr(D), (vector<double>*) &v1, sizeof(v1));
engPutVariable(ep, "T", T);
engPutVariable(ep, "D", D);
engEvalString(ep, "plot (T,D)");
fgetc(stdin);// for pausing long enough to see the plot
engEvalString(ep, "close;");
mxDestroyArray(T);
mxDestroyArray(D);
engClose(ep);
}
私の悪い英語のため申し訳ありませんが、あなたがMX 'としてMATファイルから負荷行列を望んでいたようですそれらをプロットします。 'std :: vector'との間の往復変換は必要ありません!単に 'matGetVariable'によって返された配列を使用してください。 – Amro