3

次の mex コードを使用して、C のマット ファイルから変数を取得します。変数名は「T」で、3D マトリックスです。次に、matlab で mex の出力を matlab 変数に割り当てます。すべて問題ありません。「T」のサイズは一定です (230x329x105)。私はサイズを知っているので、正しいインデックスを指すことによって、すでに mex コードで "T" の要素にアクセスできますか? get me element [50][40][60] のようなものですか、それとも T のデータを自分の 3D 配列に再マップする必要がありますか? ありがとう。

mxArray* getTravelTimes(const char *file) {
MATFile *pmat;
const char *name;
mxArray *pa;

pmat = matOpen(file, "r");
if (pmat == NULL) {
printf("Error reopening file %s\n", file);
return(NULL);
}

pa = matGetNextVariable(pmat, &name);
if (pa == NULL) {
  printf("Error reading in file %s\n", file);
  return(NULL);
 } 

if (matClose(pmat) != 0) {
  printf("Error closing file %s\n",file);
  return(NULL);
}
return(pa);
}

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  mxArray* T;
  T = getTravelTimes("./traveltimes/T_p_01.mat");
  plhs[0] = T;
}
4

1 に答える 1

1

mxGetDataon を使用しmxArrayて、実際のデータの最初の要素へのポインターを取得します。これは typevoid *であるため、ポインター演算を正しく行う前に、正しいデータ型にキャストする必要があります。

于 2012-11-09T14:43:26.020 に答える