Skip to content

Commit 1fecd19

Browse files
authored
Merge pull request #103 from rossbar/reuse-fractal-masks
ENH: compute mask only once per iteration in fractals notebook
2 parents d50f534 + 06b270d commit 1fecd19

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

content/tutorial-plotting-fractals.md

+18-13
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)