Skip to content

Commit 1fecd19

Browse files
authored
Merge pull request numpy#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

Lines changed: 18 additions & 13 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy