.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/plot_benchmark_dot_mul_timeit.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_plot_benchmark_dot_mul_timeit.py: .. _l-example-mul-timeit: Compares matrix multiplication implementations with timeit ========================================================== :epkg:`numpy` has a very fast implementation of matrix multiplication. There are many ways to be slower. The following uses :mod:`timeit` to compare implementations. Compared implementations: * :func:`multiply_matrix ` `code `_ * :func:`c_multiply_matrix ` `code `_ * :func:`c_multiply_matrix_parallel ` `code `_ * :func:`c_multiply_matrix_parallel_transposed ` `code `_ .. contents:: :local: Preparation +++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 35-52 .. code-block:: default import timeit import numpy from td3a_cpp.tutorial.td_mul_cython import ( multiply_matrix, c_multiply_matrix, c_multiply_matrix_parallel, c_multiply_matrix_parallel_transposed as cmulparamtr) va = numpy.random.randn(150, 100).astype(numpy.float64) vb = numpy.random.randn(100, 100).astype(numpy.float64) ctx = { 'va': va, 'vb': vb, 'c_multiply_matrix': c_multiply_matrix, 'multiply_matrix': multiply_matrix, 'c_multiply_matrix_parallel': c_multiply_matrix_parallel, 'c_multiply_matrix_parallel_transposed': cmulparamtr} .. GENERATED FROM PYTHON SOURCE LINES 53-57 Measures ++++++++ numpy .. GENERATED FROM PYTHON SOURCE LINES 57-60 .. code-block:: default res0 = timeit.timeit('va @ vb', number=100, globals=ctx) print("numpy time", res0) .. rst-class:: sphx-glr-script-out .. code-block:: none numpy time 0.029423824977129698 .. GENERATED FROM PYTHON SOURCE LINES 61-62 python implementation .. GENERATED FROM PYTHON SOURCE LINES 62-68 .. code-block:: default res1 = timeit.timeit( 'multiply_matrix(va, vb)', number=10, globals=ctx) print('python implementation', res1) .. rst-class:: sphx-glr-script-out .. code-block:: none python implementation 36.37305003963411 .. GENERATED FROM PYTHON SOURCE LINES 69-70 cython implementation .. GENERATED FROM PYTHON SOURCE LINES 70-76 .. code-block:: default res2 = timeit.timeit( 'c_multiply_matrix(va, vb)', number=100, globals=ctx) print('cython implementation', res2) .. rst-class:: sphx-glr-script-out .. code-block:: none cython implementation 0.73594726389274 .. GENERATED FROM PYTHON SOURCE LINES 77-78 cython implementation parallelized .. GENERATED FROM PYTHON SOURCE LINES 78-84 .. code-block:: default res3 = timeit.timeit( 'c_multiply_matrix_parallel(va, vb)', number=100, globals=ctx) print('cython implementation parallelized', res3) .. rst-class:: sphx-glr-script-out .. code-block:: none cython implementation parallelized 0.10048561217263341 .. GENERATED FROM PYTHON SOURCE LINES 85-86 cython implementation parallelized, AVX + transposed .. GENERATED FROM PYTHON SOURCE LINES 86-92 .. code-block:: default res4 = timeit.timeit( 'c_multiply_matrix_parallel_transposed(va, vb)', number=100, globals=ctx) print('cython implementation parallelized avx', res4) .. rst-class:: sphx-glr-script-out .. code-block:: none cython implementation parallelized avx 0.042188897263258696 .. GENERATED FROM PYTHON SOURCE LINES 93-94 Speed up... .. GENERATED FROM PYTHON SOURCE LINES 94-99 .. code-block:: default print(f"numpy is {res1 / res0:f} faster than pure python.") print(f"numpy is {res2 / res0:f} faster than cython.") print(f"numpy is {res3 / res0:f} faster than parallelized cython.") print(f"numpy is {res4 / res0:f} faster than avx parallelized cython.") .. rst-class:: sphx-glr-script-out .. code-block:: none numpy is 1236.176808 faster than pure python. numpy is 25.011951 faster than cython. numpy is 3.415110 faster than parallelized cython. numpy is 1.433835 faster than avx parallelized cython. .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 37.302 seconds) .. _sphx_glr_download_auto_examples_plot_benchmark_dot_mul_timeit.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_benchmark_dot_mul_timeit.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_benchmark_dot_mul_timeit.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_