mirror of
https://github.com/wassname/scikit-image.git
synced 2026-07-14 11:18:06 +08:00
add user guide parallelization
This commit is contained in:
Executable
+60
@@ -0,0 +1,60 @@
|
||||
=========================
|
||||
How to parallelize loops?
|
||||
=========================
|
||||
|
||||
In image processing, we frequently apply the same algorithm
|
||||
on a large batch of images. Let us define an example.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from skimage import data, color
|
||||
from skimage.restoration import denoise_tv_chambolle
|
||||
from skimage.feature import hog
|
||||
|
||||
def tasks(image):
|
||||
"""
|
||||
Apply some functions.
|
||||
"""
|
||||
image = denoise_tv_chambolle(image, weight=0.1, multichannel=True)
|
||||
fd, hog_image = hog(color.rgb2gray(image), orientations=8,
|
||||
pixels_per_cell=(16, 16), cells_per_block=(1, 1),
|
||||
visualise=True)
|
||||
|
||||
|
||||
# Prepare images
|
||||
hubble = data.hubble_deep_field()
|
||||
width = 10
|
||||
pics = [hubble[:,slice:slice+width] for slice in range(0, 1000, width)]
|
||||
|
||||
To call the function ``tasks`` on each element of the list ``pics``, it is
|
||||
usual to write a for loop. To measure the execution time of this loop, a function
|
||||
is defined and called with ``timeit``.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def classic_loop():
|
||||
for image in pics:
|
||||
tasks(image)
|
||||
|
||||
import timeit
|
||||
print("classic_loop():", timeit.timeit("classic_loop()", setup="from __main__ import (classic_loop, tasks, pics)", number=1))
|
||||
|
||||
Another equivalent way to code this loop is to use a comprehension list which has the same efficiency.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def comprehension_loop():
|
||||
[tasks(image) for image in pics]
|
||||
|
||||
print("comprehension_loop():", timeit.timeit("comprehension_loop()", setup="from __main__ import (comprehension_loop, tasks, pics)", number=1))
|
||||
|
||||
``joblib`` is a library providing an easy way to parallelize for loops once we have a comprehension list.
|
||||
The number of jobs can be specified.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from joblib import Parallel, delayed
|
||||
def joblib_loop():
|
||||
Parallel(n_jobs=4)(delayed(tasks)(i) for i in pics)
|
||||
|
||||
print("joblib_loop():", timeit.timeit("joblib_loop()", setup="from __main__ import (joblib_loop, tasks, pics)", number=1))
|
||||
Reference in New Issue
Block a user