私の質問
- この計算を高速化できる方法はありますか?
- 同じ値を計算するために使用できるより良いアルゴリズムまたは実装はありますか?
アルゴリズムの説明
効率的な方法で解決するのに苦労している複雑なインデックス作成の問題があります。
目標は、同じサイズの行列、、およびw_prime
の値の組み合わせを使用して行列を計算することです。w
dY
dX
の値はw_prime(i,j)
として計算されますmean( w( indY & indX ) )
。 ここで、indY
とindX
は と のインデックスでdY
、それぞれdX
と に等しくi
なりj
ます。
を計算するアルゴリズムの matlab での簡単な実装を次に示しますw_prime
。
for i = 1:size(w_prime,1)
indY = dY == i;
for j = 1:size(w_prime,2)
indX = dX == j;
w_prime(ind) = mean( w( indY & indX ) );
end
end
パフォーマンスの問題
以下の例では、この実装で十分です。ただし、私の実際の使用例w
では、dY
、dX
は ~3000x3000
であり、w_prime
~60X900
です。つまり、各インデックス計算は最大 900 万の要素で行われます。不必要に、この実装は遅すぎて使用できません。さらに、このコードを数十回実行する必要があります。
計算例
計算したい場合w(1,1)
- その等しい 1のインデックスを見つけて、次の
dY
ように保存します。indY
- その等しい 1のインデックスを見つけて、次の
dX
ように保存します。indX
- の交点を見つけて名前を付け
indY
てindX
保存ind
mean( w(ind) )
に保存w_prime(1,1)
一般的な問題の説明
2 つのベクトルX
と で定義された設定値T
があります。どちらも 1XN で、N は ~3000 です。さらに、X と T の値は、それぞれ (1 60) と (1 900) の間隔で区切られた整数です。
行列dX
とdT
は単なる距離行列であり、点間のペアごとの距離が含まれていることを意味します。すなわちdx(i,j)
等しいabs( x(i) - x(j) )
。
それらは以下を使用して計算されます。dx = pdist(x);
マトリックスw
は、あるポイントが別のポイントに与える影響を表す重みマトリックスと考えることができます。
計算の目的は、ディメンション内とディメンション内でw_prime(a,b)
によって区切られたポイントのサブセット間の平均重みを決定することです。a
X
b
T
これは次のように表現できます。