私の質問
- この計算を高速化できる方法はありますか?
- 同じ値を計算するために使用できるより良いアルゴリズムまたは実装はありますか?
アルゴリズムの説明
効率的な方法で解決するのに苦労している複雑なインデックス作成の問題があります。
目標は、同じサイズの行列、、およびw_primeの値の組み合わせを使用して行列を計算することです。wdYdX
の値は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)によって区切られたポイントのサブセット間の平均重みを決定することです。aXbT
これは次のように表現できます。
