複素数空間での多項式の根の収束のカラー マッピングを作成しようとしています。これを行うために、点のグリッドを作成し、これらの点にニュートン法を適用して、それぞれがどの複素根に収束するかを見つけました。これにより、複素数の 2 次元配列が得られます。その要素は、ある程度の許容範囲内で収束するポイントを示します。そのマトリックスの数値を要素ごとのカラー マッピングに一致させたいと考えています。
配列を反復処理し、要素ごとに色を計算することでこれを行いましたが、非常に遅く、ベクトル化することでメリットが得られるようです。これまでの私のコードは次のとおりです。
def colorvec(rootsmatrix, known_roots):
dim = len(known_roots)
dist = ndarray((dim, nx, ny))
for i in range(len(known_roots)):
dist[i] = abs(rootsmatrix-known_roots[i])
これにより、各ポイントの計算されたルートから実際の各ルートまでの距離を含む 3 次元配列が作成されます。75 000 000 の要素を除いて、このように見えます。
[ [ [6e-15 7e-15 0.5]
[1.5 5e-15 0.5] #submatrix 1
[0.75 0.98 0.78] ]
[ [1.5 0.75 0.5]
[8e-15 5e-15 0.8] #submatrix 2
[0.75 0.98 0.78] ]
[ [1.25 0.5 5e-15]
[0.5 0.64 4e-15] #submatrix 3
[5e-15 4e-15 7e-15] ]
を取りdist
、2 次元および 3 次元の引数ごとに 1 次元の引数 (つまり、1、2、または 3) を返します。これdist
は最小です。それが私のカラーマッピングになります。たとえば、3 つの部分行列のそれぞれの要素 (0,0) を比較すると、color(0,0) = 0 になります。同様に、color(1,1) = 0 および color (2,2) = 2 です。カラーマトリックス全体に対してこれを実行できるようにしたいと考えています。
を使用してこれを行う方法を見つけることができませんでしたがnumpy.argmin
、何かが欠けている可能性があります。これを行う別の方法があれば、特にループを含まない場合は、喜んでお知らせします。ここでは最大 25MP の画像を作成しているため、ループで色を割り当てるのに 25 分かかります。
アドバイスありがとうございます!