N = 570*720 = 410400 (画像ピクセル数) の大きな NxN スパース バンド マトリックス A を作成する必要があります。
数学的には、A(m,n) = C1 * exp(-|mn|^2); m = 1:N、n = 1:N
基本的には、各行で評価されるガウス関数であり、行インデックスは平均であり、任意ではあるが小さな標準偏差です。
N = 100 の場合、次のようになります。
残念ながら、不要な計算のため、N = 410400 の場合は非常に遅くなります。
1) for ループの使用
A = sparse(N,N);
for i=1:N
A(i,:) = normpdf(1:N, i, 30);
end
これは、normpdf を N 回呼び出すため、無駄で遅くなります。
2) N での平均を使用して 1:2N の normpdf を 1 回計算し、インデックスに基づく適切な平均で A の行を循環的にシフトします。matlab の circshift は、シフト サイズが異なる行列を列ごとにシフトできません。ここでも circshift を N 回呼び出す必要があります --> 無駄です。
3)おそらくmvnpdfを使用しますが、入力ベクトルが必要であり、メッシュグリッドでこれらを生成すると
大量のメモリが消費されます。
4) bsxfun は 3 つ以上の引数を取らないため、2 つのパラメーターを受け入れるユーザー定義のガウス関数 (固定 SD を使用) で bsxfun を使用します。
これを効率的に達成する方法についてのアイデアはありますか?
ありがとう