2016-12-30 2 views
1

armadilloでvar()関数を使用するにはどうすればよいですか?armadilloでvar/variance関数を使用する方法

私は行が変数/機能であり、列が観測/インスタンスである行列を持っています。

私は各行の分散を取得するため、変数/特徴を最大の分散で決定することができます。

現在、私が呼び出しています:dataは私の行列をある

auto variances = arma::var(data, 0, 1); 

私が現時点で言うことができる限り、私は行列を得ていますか?そして、ドキュメントはこれが正しいことを示唆しています。私は自分の行列の行ごとに分散スコアを持つ単一のベクトルを返すことを期待していました。

私は私の行をループすることができますし、個別にそのような行ごとの分散を得る:

for (auto i = 0; i < data.n_rows; ++i) 
    auto rowVariance = arma::var(dataSet.data.row(i)); 

をしかし、私はこれを行うにはないことを好むだろう。

私は行列の各行に分散値を含む単一のベクトルを取得し、このベクトルに対してarma :: sort_index()を使用してソートされた分散に対応するソートされたインデックスのセットを取得したいと考えています。

ありがとうございます。

+1

'arma :: vec variances = arma :: var(data、0、1);'と書いてください。 armadilloは高度にテンプレート化されたクラスなので、著者は 'auto'を使うことを推奨しません。 – vagoberto

+1

とにかく、 'mat variances = var(data、0、1);'を宣言し、 'uvec indices = sort_index(variances);'を使うことができます。この場合、 'variances'は' 1xN'マトリックスになり、 'indices'は常に列ベクトルになります。 – vagoberto

+0

ちょっと@vagoberto、ありがとうございました。私はarma :: var variances = arma :: var(data、0、1)を使用していたため、arma :: Colを使用していたはずです。 variances = arma :: var(data、0、1)私のデータマトリクスはMat です。浮動小数点と倍精度の両方の精度しか許されていません。情報をありがとう。私はそれを解決するのを助けた。 –

答えて

0

私はarma::var variances = arma::var(data, 0, 1)を使用していたので、浮動小数点と倍精度の両方の精度のみを許可しているので、arma::Mat<T>のデータ行列のためにarma::Col<T> variances = arma::var(data, 0, 1)を使用していたはずです。

上記のvagobertoのコメントは私を正しい軌道に乗せました。

関連する問題