ここでは、ニュートンの方法を使ってフラクタルを作成するために書いた小さなスクリプトです。numpy配列でフラクタル生成を高速化するにはどうすればよいですか?
import numpy as np
import matplotlib.pyplot as plt
f = np.poly1d([1,0,0,-1]) # x^3 - 1
fp = np.polyder(f)
def newton(i, guess):
if abs(f(guess)) > .00001:
return newton(i+1, guess - f(guess)/fp(guess))
else:
return i
pic = []
for y in np.linspace(-10,10, 1000):
pic.append([newton(0,x+y*1j) for x in np.linspace(-10,10,1000)])
plt.imshow(pic)
plt.show()
Iは、単一の推測ではなく、アレイ全体に作用newton()
関数を適用する1000によって-1000 linspacesの各要素を介してnumpyのアレイを使用して、それにもかかわらず、ループしています。
私の質問はこれですnumpy配列の利点をより良く活用するために私のアプローチを変更するにはどうすればよいですか?
P.S.:あまりにも長く待たずにコードを試したい場合は、100×100の方が良いでしょう。
追加の背景:
多項式のゼロを見つける方法を参照してください。
フラクタルの基本的な考え方は、複素平面の推測をテストし、反復の回数を数えてゼロに収束させることです。これは、最終的にステップ数を返すnewton()
の再帰についてです。複素平面内の推測は、収束までのステップ数で表される画像内のピクセルを表す。簡単なアルゴリズムから、これらの美しいフラクタルを得ることができます。
ありがとうございます。これは私がそれらを作る方法を理解するのを助けています –