0

入力列ベクトル/行列で行列乗算を実行するために、.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出力に書き込むことができません。

4

1 に答える 1

0

メーリングリストの助けを借りて、私は最終的に私の問題を解決することができました:

output(ii) = result( 0 , 0 ) ; // assign from indexed result matrix to output
于 2013-10-06T23:13:43.673 に答える