C++EigenはC++で書かれた線形代数ライブラリである。遅延評価を適切に使うことで、計算コストを削減できることがある。EigenEigenの遅延評価については公式ドキュメントの次のページが詳しいため、本記事ではより厳密性・網羅性を欠いた平易な説明に努める。暗黙的に実行されているとする。a.transpose();と記述したとする。適当な実装が入るとする。戻り値は、列数と行数は入れ替わるものの、「行列」であると期待される。代入しても期待通りに動作する。厳密にその型について考えると、少し見方が変わる。いう別の型であると分かる。これは、演算結果として得られる行列そのものではなく、転置という式を表す型である。static_cast<MatrixXd>(a.transpose());のような、式から行列への暗黙的なキャストを実行していたのだと解釈できる。呼び出し自体には計算コストがかからないという点である。実際に転置の操作が実行される(式が評価される)のは、転置の結果が必要になったときである。型に変換する際に初めて転置に相当する操作が実行されている(式が評価されている)はずである。遅延評価によって、余計な計算コストを削減できる場合がある。以下のような行列の転置と行列の積を考える。b;この例では遅延評価の効果により、いわゆる転置の操作(行列の行と列を入れ替えた行列オブジェクトの生成)が直ちに実行されるわけではない。いう型の式が生成され、必要があるまで積の操作は計算されない)ということになる。型同士の積を計算するようにしたとすると、転置の操作がある分だけ計算コストが増えてしまうと考えられる。遅延評価の挙動を意識して適切にコーディングすることで、計算コストを削減することができる。逆に、上記のような無用な型のキャスト(無用なタイミングでの式の評価)を行ってしまうと、遅延評価の利点を得られず計算コストが増えてしまう場合がある。キーワードを使うことで、容易に無用な型のキャスト(無用なタイミングでの式の評価)を避けることができる場合がある。ように推論されると思われる。行列のように振舞うが、実際には評価されるのを待っている式であるという点は常に意識しなくてはならない。例として、以下のような関数を考える。この関数自体はナンセンスで、あくまで計算の様子を明らかにするための例にすぎない。型を指定した中間オブジェクトを3つ生成してしまっており、遅延評価の恩恵を受けられていない。式として受けることで、中間オブジェクトの生成を抑制しようとしている。異なる)のまま扱おうとしている。型の中間オブジェクトとして明示的に生成するのではなく、式としてそのまま受け取ろうとしている。d.maxCoeff();}Func5最後に、ここでは変数の宣言をやめて一行で演算を書こうとしている。これによって自動的に適切な型が推論されて遅延評価の利点が得られることが期待できる。以上の5つの異なる実装を実行した際の計算時間の例を下記に示す。値は500回計算を行った際の平均を表し、エラーバーはその際の標準偏差を表す。使って無用な型のキャストを避けるほど実行性能が向上している。(途中変数を定義せずに一行で記述)は、この場合は実質的に同じ処理が走っていると思われる。活用して実装すると良いかもしれない。しているため、関数呼び出し側で暗黙的なキャストが発生してしまい、遅延評価の恩恵が失われてしまうことがある。クラスを活用して引数の宣言をすることで、この問題を解決できることがある。d.maxCoeff();}このことは公式ドキュメントの次のページが詳しい。example最後にC++についてもEigenについても大した知識なく本記事を書いているので、致命的な勘違いが含まれている可能性がある。何か気付いた方はご指摘いただけると大変ありがたい。本記事では、これらのアイテム間の比較に基づくデータ(例えば二者間の勝敗など)に対して、適当な確率モデルを導入し、説明することについて考える。その確率モデルの潜在変数を、データを元に推定することについて考える。基づく確率モデルのみ考える(公理の定義はこの記事では触れない)。ある場合もあるが、この記事では簡単のため正の値として考える。)が存在し、比較はこれらの値に基づいて行われる。このパラメタは論文や文脈により異なる呼ばれ方をする。本題:比較データの形式と主な確率モデル比較データにはいくつかの形式が考えられる。それぞれについて、それを説明するための確率モデルが考案されている。簡潔にまとまっている。comparisonは日本語では一対比較などと呼ばれる。これは2つのアイテムが比較された結果どちらかが選択されたという事象を表すデータ形式である。選ばれるという事象はなどと表現される。Tsukida+11]。このモデルでは、上記の事象が起こる確率をとする。[Handley01]。[Handley01]。[Tsukida+11]。倣い、このように呼ぶことにする。これは、2つ以上のアイテムが同時に比較された結果ある1つのアイテムが選択されたという事象を表すデータ形式である。[Koyama+17]。Tsukida+11]。このモデルでは、上記の事象が起こる確率をとする。比較対象がちょうど2つのときはBradley-Terryモデルと実質的に同じになる。rankingは、2つ以上のアイテムについて、それらの順序が与えられたという事象を表すデータ形式である。