@@ -198,10 +198,11 @@ def divergence_rate(mesh, num_iter=10, radius=2):
198198 z = mesh.copy()
199199 diverge_len = np.zeros(mesh.shape) # Keep tally of the number of iterations
200200
201+ # Iterate on element if and only if |element| < radius (Otherwise assume divergence)
201202 for i in range(num_iter):
202- # Iterate on element if and only if |element| < radius (Otherwise assume divergence)
203- diverge_len[np.abs(z) < radius ] += 1
204- z[np.abs(z) < radius ] = f(z[np.abs(z) < radius ])
203+ conv_mask = np.abs(z) < radius
204+ diverge_len[conv_mask ] += 1
205+ z[conv_mask ] = f(z[conv_mask ])
205206
206207 return diverge_len
207208```
@@ -252,8 +253,9 @@ def julia(mesh, c=-1, num_iter=10, radius=2):
252253 diverge_len = np.zeros(z.shape)
253254
254255 for i in range(num_iter):
255- z[np.abs(z) < radius] = np.square(z[np.abs(z) < radius]) + c
256- diverge_len[np.abs(z) < radius] += 1
256+ conv_mask = np.abs(z) < radius
257+ z[conv_mask] = np.square(z[conv_mask]) + c
258+ diverge_len[conv_mask] += 1
257259
258260 return diverge_len
259261```
@@ -325,8 +327,9 @@ def mandelbrot(mesh, num_iter=10, radius=2):
325327 diverge_len = np.zeros(z.shape)
326328
327329 for i in range(num_iter):
328- z[np.abs(z) < radius] = np.square(z[np.abs(z) < radius]) + c[np.abs(z) < radius]
329- diverge_len[np.abs(z) < radius] += 1
330+ conv_mask = np.abs(z) < radius
331+ z[conv_mask] = np.square(z[conv_mask]) + c[conv_mask]
332+ diverge_len[conv_mask] += 1
330333
331334 return diverge_len
332335```
@@ -349,8 +352,9 @@ def general_julia(mesh, c=-1, f=np.square, num_iter=100, radius=2):
349352 diverge_len = np.zeros(z.shape)
350353
351354 for i in range(num_iter):
352- z[np.abs(z) < radius] = f(z[np.abs(z) < radius]) + c
353- diverge_len[np.abs(z) < radius] += 1
355+ conv_mask = np.abs(z) < radius
356+ z[conv_mask] = f(z[conv_mask]) + c
357+ diverge_len[conv_mask] += 1
354358
355359 return diverge_len
356360```
@@ -391,10 +395,11 @@ def newton_fractal(mesh, f, df, num_iter=10, r=2):
391395 diverge_len = np.zeros(z.shape)
392396
393397 for i in range(num_iter):
394- pz = f(z[np.abs(z) < r])
395- dp = df(z[np.abs(z) < r])
396- z[np.abs(z) < r] = z[np.abs(z) < r] - pz/dp
397- diverge_len[np.abs(z) < r] += 1
398+ conv_mask = np.abs(z) < r
399+ pz = f(z[conv_mask])
400+ dp = df(z[conv_mask])
401+ z[conv_mask] = z[conv_mask] - pz/dp
402+ diverge_len[conv_mask] += 1
398403
399404 return diverge_len
400405```
0 commit comments