入力列ベクトル/行列で行列乗算を実行するために、.oct ファイルに簡潔なコードを書きたいと思います。関数は、たとえば、11 要素の行ベクトル A を内部的に作成し、ループ内で A * B を実行します。ここで、B は入力ベクトルを下る 11 要素のスライディング ウィンドウであり、結果を出力列ベクトルに書き込みます。ループが進行するにつれてマトリックス。http://wiki.octave.org/Tips_and_tricksの情報を使用してさまざまなアプローチを試みましたが、何もコンパイルできません - エラーは次のとおりです。
エラー: 代入で 'Matrix' を 'double' に変換できません
私のコードの関連部分は次のとおりです:-
Matrix price = args(0).matrix_value () ; // a single column matrix
Matrix output = args(0).matrix_value () ;
// create intermediate calculation matrices
Matrix vec_11 (1,11) ;
Matrix price_11 (11,1) ;
Matrix result (1,1) ;
for ( int ii = -m ; ii < (m+1) ; ii ++ )
{
vec_11 is filled in this loop and then doesn't change
}
for ( octave_idx_type ii (50) ; ii < args(0).length () ; ii++ )
{
// extract rolling window and perform matrix multiplication
result = vec_11 * price.extract(ii-10,0,ii,0) ;
output(ii,1) = result ; // this writing to output matrix fails
}
retval_list(0) = output ;
価格、vec_11、結果、および出力に行列値を使用しているのは、行列の乗算を実行しようとしているためです。なぜこの変換を double エラーに変換するのかわかりません。price と output を column_vector_value に変更し、vec_11 を RowVector に変更しても、同じエラーが発生します。のようだ
result = vec_11 * price.extract(ii-10,0,ii,0) ;
はmatrix_valueを与えていますが、matrix_valueまたはcolumn_vector_value出力に書き込むことができません。