最初の数回のループの値を書き留めてから、パターンを見つけると役立つ場合があります。ベクトル F (反復ごとに 1 つのエントリ) は最初から始まりますf
(それを と呼びましょうf0
)。次に、2 番目のエントリはf0*bins
です。次にf0*bins^2
、などです。そうF
でf0*[1 bins bins^2 bins^3]...
あり、次のように計算できます
F = f0 * bins .^ (0:z-1);
bins^0 は 1 なので。
floor
これより前でも、操作全体を一度に計算できました: floor(clip*bins/256)
. あとは、P 要素ベクトル F をその 3D 行列 MxNxP で乗算する方法を理解する必要があります。 bsxfun
この種のことを行いますが、次元は一致するか、正確に 1 である必要があります。したがって、F は P ではなく 1x1xP でなければなりません。次に、3 次元に沿ってすべてを合計します。
binno = sum(bsxfun(@times, floor(clip*bins/256), reshape(F, [1 1 length(F)])), 3);
ちょっと注意してください...この質問は、少なくともサイズで定義された入力でより簡単に答えられます。さらに良いのは、正しい次元のサンプル データを生成する数行です。何もないため、上記のコードをテストできませんでした。そのため、データに適応させるのはあなたの責任です。