私は今晩少しワイルドになり、分析中のいくつかの財務データを操作するために、ヒストグラム ビンでパーティーをすることにしました。
しかし、私が「ビン内」操作を適用したい方法が、研究や遊びを通してもすぐに明らかにならず、煩わしいことを証明しているため、パーティーはうんざりしているようです.
欲望:列内で「ビニング」インデックスを使用して、ある種の行単位の「ビン内」操作を実行したいと思います。この操作では、独自のビンの最初の要素への相対参照が行われます。操作が違いを取る次の単一ビンの例を検討してください
A=
1 10.4
1 10.6
1 10.3
1 10.2
相対演算は、列 2 のすべての要素と列 2 の最初の要素との差をとります。
bin_differencing_function(A)
=
1 10.4 0.0
1 10.6 0.2
1 10.3 -0.1
1 10.2 -0.2
さて、さらに便利なのは、bin_differencing_function(A) に任意の数のビンを持つ二重列行列を供給できることです。
A=
1 10.4
1 10.6
1 10.3
1 10.2
2 10.2
2 10.6
2 10.8
2 10.8
3 11.0
3 10.8
3 10.8
3 10.8
better_bin_differencing_function(A)
=
1 10.4 0.0
1 10.6 0.2
1 10.3 -0.1
1 10.2 -0.2
2 10.2 0.0
2 10.6 0.4
2 10.8 0.6
2 10.8 0.6
3 11.0 0.0
3 10.8 -0.2
3 10.8 -0.2
3 10.8 -0.2
最も便利なのは、better_bin_differencing_function(A) に任意の数のビンを持つ二重列行列を供給できることです。
A=
1 10.4
1 10.6
1 10.3
2 10.2
2 10.6
2 10.8
2 10.8
2 10.7
3 11.0
3 10.8
best_bin_differencing_function(A)
=
1 10.4 0.0
1 10.6 0.2
1 10.3 -0.1
2 10.2 0.0
2 10.6 0.4
2 10.8 0.6
2 10.8 0.6
2 10.7 0.5
3 11.0 0.0
3 10.8 -0.2
大きな望みは、(可能であれば) ベクトル化を利用して、長さが 1 から 200 の間で変化する多くのビンを操作するコードを作成することです。
accumarray(A(:,1),A(:,2),[],@(x) fun(x))
fun(x) は for ループを持つ関数です。
Windows 7 で MATLAB 7.10.0.499 (R2010a) を実行しています。例によってこのクエリが長くなってしまい申し訳ありません。