1

入力 Nx1 行列を定数 Nx1 行列で乗算する C mex ファイルを作成しようとしています。行列を作成し、mex 関数の呼び出しごとに常に同じ値を割り当てたいと考えています。私はチュートリアルを見てきましたが、マトリックスを作成し、それらを入力または出力に結び付けている人しか見つかりません。私のマトリックスはそれから完全に独立している必要があります。

私がやろうとしていることの疑似コード:

mxArray *input, *constant_matrix, *output;
input = mxDuplicateArray(prhs[0]);
constant_matrix = [10 15 20 73];            //<---- this is what I can't do.
for i = 1 to 4
    output += input[i]*constant_matrix[i];
return output;

前もって感謝します!

4

2 に答える 2

2

スタック上に作成したい場合は、

const double constant_matrix[]={10,15,20,73};

..または、マトリックスが少し大きい場合、またはコンパイル時にサイズがわからない場合は、ヒープを割り当てます。mexファイルで使用...

double* constant_matrix = (double*)mxCalloc(n, sizeof(double));

..そして、ループに入力します (n は要素の数です)。この 2 番目の方法を使用する場合は、動的に割り当てられたメモリを解放することを忘れないでください。

于 2012-05-25T00:44:52.883 に答える
0

まだ探している場合は、単純な実装を次に示します (params チェックなし):

たとえば .cpp

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    plhs[0] = mxDuplicateArray(prhs[0]);
    const double myArray[4] = {10,15,20,73};
    double *in = mxGetPr(prhs[0]), *out = mxGetPr(plhs[0]);
    for(int i=0; i<4; i++) {
        out[i] += in[i]*myArray[i];
    }
}

コンパイルしたら、テストできます。

>> example(1:10)
ans =
    11    32    63   296     5     6     7     8     9    10
于 2012-05-25T01:19:24.357 に答える