mex関数に構造体を設定しようとしています。mexFunctionで作成された構造の基本はありますが、構造内のフィールドが配列であり、「for」ループが繰り返されるときにこの配列の各要素にデータを入力する場合は、少し混乱します。
....
mxArray *value;
mwSize dims[2] = {16,8};
int numFields = 2;
const char *fieldNames[] = {"array1", "array2"};
plhs[2] = mxCreateStructArray(2, dims, numFields, fieldNames);
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 8; j ++)
{
value1 = (some calculation);
value = mxCreateDoubleMatrix(1,18,mxREAL);
*mxGetPr(value[sampleIndex]) = value1;
mxSetField(plhs[2], i, "array1", value);
// i want to set the array1[j] element
value2 = (some other calculation);
value = mxCreateDoubleMatrix(1,8,mxREAL);
*mxGetPr(value) = value2;
mxSetField(plhs[2], i, "array2", value);
}
}
....
フィールド「array1」と「array2」は両方とも同じサイズのベクトルです(たとえば8つの要素)。個々の要素にデータを入力する方法がわかりません。配列インデックス'j'でフィールド名を設定するにはどうすればよいですか。
説明を支援するために、構造は次のようになります。構造は16個の要素の配列であり、各要素には2つのフィールドがあり、各フィールドにはそれぞれ8つの要素があります。
structure(0).array1 = [1 2 3 4 5 6 7 8];
structure(0).array2 = [11 12 13 14 15 16 17 18];
structure(1).array1 = [21 22 23 24 25 26 27 28];
structure(1).array2 = [211 212 213 214 215 216 217 218];
structure(2).array1 = [31 32 33 34 35 36 37 38];
structure(2).array2 = [311 312 313 314 315 316 317 318];
structure(3).array1 = [41 42 43 44 45 46 47 48];
structure(3).array2 = [411 412 413 414 415 416 417 418];
...
値は任意です。