The Python and Julia Programming Languagessepsi.ipbeja.pt/sepsi15mai2014.pdf · micro-benchmarks...

26
Numerical Signal Processing Numerical Programming Languages Python Julia The Python and Julia Programming Languages scientific, numerical and signal processing Jos´ e Jasnau Caeiro [email protected] Lab SEPSI Instituto Polit´ ecnico de Beja Beja, 15 th May 2014 1 de 26 Caeiro The Python and Julia Programming Languages

Transcript of The Python and Julia Programming Languagessepsi.ipbeja.pt/sepsi15mai2014.pdf · micro-benchmarks...

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    The Python and Julia Programming Languagesscientific, numerical and signal processing

    José Jasnau [email protected]

    Lab SEPSIInstituto Politécnico de Beja

    Beja, 15th May 2014

    1 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    1 Numerical Signal Processing

    2 Numerical Programming Languages

    3 Python

    4 Julia

    2 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Signals and Signal Processing

    An informal definition of signal is,

    Definition

    A signal is a function of independent variables such as time,distance, position, temperature, and pressure (S. K. Mitra,2002)

    another signal processing is, according to Wikipedia (2014),

    Definition

    Signal processing is an area of Systems Engineering, ElectricalEngineering and Applied Mathematics that deals with operationson or analysis of analog as well as digitized signals, representingtime-varying or spatially varying physical quantities.

    3 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Examples of Signals

    Some examples of signals are:

    sound air pressure as a function of time at a certain point in3D space;

    electromagnetic radiation

    ECG electrocardiography signal, a function representingthe electrical activity;

    images photographs or video frames;

    sensor generated signals temperature, pressure, etc.

    4 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Typical Signal Processing

    Data structures and operations:

    matrix operations;

    discrete vector based processing;

    Fast Fourier Transform;

    Discrete Transforms;

    filtering;

    1D and 2D discrete convolution (a multiply and addoperation);

    N-dimensional statistical signal processing;

    image point and local based operators.

    And most of the time several data formats must be supported andalso scientific plotting.

    5 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Some historical landmarks

    Fortran a general purpose imperative programming language(late 1950’s)

    high performance compiler;huge set of numerical and scientific libraries;static memory allocation;

    C another general purpose imperative programminglanguage (1973)

    maps efficiently to typical machine instructions;available for the majority of computerarchitectures and operating systems, namelymicrocontroler and digital signal processors(DSPs);

    6 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    MATLAB

    The golden standard programming language used for signalprocessing research and development

    developed in the late 1970s to give easy access to students toLINPACK and EISPACK Fortran algebraic libraries;

    popular in applied mathematics, control engineering, imageprocessing, numerical analysis and signal processing;

    simple syntax with dynamic programming languagesproperties;

    can call functions and subroutines written in C or Fortran;

    large set of functions and toolkits (a set of functions andlibraries dedicated to a specific field).

    7 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    MATLAB

    MATLAB is a proprietary product of MathWorks;

    very expensive with toolboxes sold separately using a licensemodel;

    last release is MATLAB 8.3;

    offers some support for parallel processing;

    poor syntax for advanced programming and data structures,namely object oriented programming, lists, dictionaries, etc.

    offers support to symbolic processing through MuPAD;

    Java, Perl or .NET libraries can be directly called fromMATLAB;

    8 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    MATLAB and alternatives

    Some open source alternatives have appeared offering a largeextent of compatibility:

    GNU Octave appeared around 1988 and is mostly compatible withMATLAB adopting a GNU General Public License;

    Scilab appeared around 1990 within INRIA, it is the mostcompatible language with MATLAB, and althoughfree presents a commercial support through scilabenterprises;

    FreeMat another free alternative under GPL and with 95%compatibility with MATLAB;

    ScalaLab provides an efficient MATLAB like working style forthe Java Virtual Machine and is programmed inScala.

    9 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    General Properties

    Python appeared in 1991 and is one of the most successfuldynamic programming languages;

    supports a large set of programming paradigms;

    programmers productivity is high due to the language and thelarge set of libraries available;

    easy to interface to C;

    good support for high level data structures.

    10 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    numpy, scipy and matplotlib

    In 2005 a stable numerical package proposal was created by TravisOliphant, based on previous ancestor packages:

    NumPy provides functionality comparable to MATLAB;

    easily interfaces with C;

    SciPy extends this functionality;

    Matplotlib is an advanced plotting package;

    A scientific programming framework joining several packages wascreated using Python: sage.It is very large (several GB and hundreds of packages) and iscurrently under version 6.2.

    11 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Criticism of MATLAB

    MATLAB is proprietary and costly;

    MATLAB is used by only 0.711% of the generalprogramming community;

    MATLAB data structures are cumbersome and does notsupport generic programming;

    MATLAB is slow when cycles and selections are involved.

    12 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Criticism of Python

    not compatible with MATLAB;

    due to design there are some multi core programminglimitations;

    slow when cycles and selections are involved.

    13 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    The Julia programming language

    The creators of Julia are based on the Massasuchets Institute ofTechnology and are:

    Alan Edelman, professor of Applied Mathematics at MIT;

    Stefan Karpinski, a programmer;Jeff Bezanson, anotherprogrammer; Viral Shah, a Bangalore programmer that workson Julia from India.

    14 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    And is being used at

    Julia is used at:

    Stanford University, Spring 2014, AA222, Introduction toMultidisciplinary Design Optimization (Prof. Mykel J.Kochenderfer)

    Pennsylvania State University, Spring 2014, ASTRO 585,High-Performance Scientific Computing for Astrophysics(Prof. Eric B. Ford)

    Cornell University, Spring 2014, CS 5220, Applications ofParallel Computers (Prof. David Bindel)

    MIT, Spring 2014 18.330, Introduction to Numerical Analysis(Dr. Homer Reid), 15.S60, Software Tools for OperationsResearch (Iain Dunning), 15.083, Integer Programming andCombinatorial Optimization (Prof. Juan Pablo Vielma)

    15 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Why Julia?

    The authors wanted a programming language with the speedof C and the dynamic programming features of Python andRuby;

    with a familiar syntax as MATLAB;

    usable for general programming as Python;

    supportive of Hadoop, an open source software framework forstorage and large-scale processing of data-sets on clusters ofcommodity hardware (Wikipedia quote);

    easy to learn to people coming from the signal processing andmachine learnig community.

    16 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Julia

    Some characteristics of the Julia programming language:

    modern dynamic programming language (development startedin 2009);

    designed for technical and scientific computing;

    syntax familiar for MATLAB programmers;

    calls Python and C functions directly;

    designed for parallel and distributed computation;

    MIT licensed: free and open source;

    developed at MIT.

    17 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    A larger set of features

    Multiple dispatch: providing the ability to define functionbehavior across many combinations of argument types;

    Dynamic type system: types for documentation, optimization,and dispatch;

    Lisp-like macros and other metaprogramming facilities;

    multiprocessing environment based on message passing;

    parallel processing with GPUs based on OpenCL withbindings based on PyOpenCL (a Python based package),https://github.com/JuliaGPU/OpenCL.jl;

    Coroutines: lightweight “green” threading;

    LLVM-based just in time compiler.

    18 de 26 Caeiro The Python and Julia Programming Languages

    https://github.com/JuliaGPU/OpenCL.jl

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Syntax example MATLAB

    1 l e n a = imread ( ’ l ena512 . pgm ’ ) ;l e n a = doub le ( l e n a ) ; channe l = s i z e ( l ena , 3) ;

    3 h e i g h t = s i z e ( l ena , 1) ; w idth = s i z e ( l ena , 2) ;l enaOutput = z e r o s ( s i z e ( l e n a ) ) ;

    5 Gx = [1 2 1 ; 0 0 0 ; −1 −2 −1];Gy = [1 0 −1; 2 0 −2; 1 0 −1];

    7 f o r i = 2 : h e i g h t − 1f o r j = 2 : h e i g h t − 1

    9 f o r k = 1 : channe ltempLena = l e n a ( i −1: i +1, j −1: j +1,k ) ;

    11 x = sum(sum(Gx .∗ tempLena ) ) ;y = sum(sum(Gy .∗ tempLena ) ) ;

    13 p i xVa l u e = s q r t ( xˆ2 + y ˆ2) ;l enaOutput ( i , j , k ) = p i xVa l u e ;

    15 endend

    17 end

    codigo/sobel.m19 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Syntax example Julia

    u s i n g Images2 l e n a = imread (” l ena512 . pgm”) ; l enaOutput = z e r o s ( s i z e (

    l e n a ) )l e n a = f l o a t ( l e n a ) ; channe l = s i z e ( l ena , 3)

    4 h e i g h t = s i z e ( l ena , 1) ; w idth = s i z e ( l ena , 2)Gx = [1 2 1 ; 0 0 0 ; −1 −2 −1]

    6 Gy = [1 0 −1; 2 0 −2; 1 0 −1]f o r i = 2 : h e i g h t − 1

    8 f o r j = 2 : h e i g h t − 1f o r k = 1 : channe l

    10 tempLena = l e n a [ i −1: i +1, j −1: j +1,k ]x = sum(sum(Gx .∗ tempLena ) )

    12 y = sum(sum(Gy .∗ tempLena ) )p i xVa l u e = s q r t ( xˆ2 + y ˆ2)

    14 l enaOutput [ i , j , k ] = p i xVa l u eend

    16 endend

    codigo/sobel.jl20 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Availability and Development Tools

    An important issue...

    availability

    It is available for Windows 32 and 64 bit versions;OSX 10.6 and above;Linux;source code.

    editors

    emacs mode is available;an eclipse plugin is being developed (https://hacknight.in/thejulialang/julia-hacknight/

    projects/7-ide-for-julia-eclipse-integration);an IDE called Julia Studio is available(https://github.com/forio/julia-studio);syntax highlighting is available for Notepad++(https://gist.github.com/catawbasam/3858496).

    21 de 26 Caeiro The Python and Julia Programming Languages

    https://hacknight.in/thejulialang/julia-hacknight/projects/7-ide-for-julia-eclipse-integrationhttps://hacknight.in/thejulialang/julia-hacknight/projects/7-ide-for-julia-eclipse-integrationhttps://hacknight.in/thejulialang/julia-hacknight/projects/7-ide-for-julia-eclipse-integrationhttps://github.com/forio/julia-studiohttps://gist.github.com/catawbasam/3858496

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Julia and Python Notebooks

    A Mathematica notebook inspired development environmentappeared within the Python scientific community:

    it is based on the IPython interactive kernel,http://ipython.org/;in 2014 appeared a book by José Unpingco based on IPythonnotebooks, Python for Signal Processing: featuring IPythonNotebooks, Springer-Verlag;it features a browser based editing environment;integrates NumPy and SciPy;fully integrates the powerfull graphics package matplotlib,http://matplotlib.org/;supports high quality mathematical typesetting usingMathJax, which is a Javascript version of most of LATEX;currently works using websockets thus only supports firefoxand google chrome.

    22 de 26 Caeiro The Python and Julia Programming Languages

    http://ipython.org/http://matplotlib.org/

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Julia and Python Notebooks

    The IPython notebook development environment is also availablefor Julia:

    brings an easy to use development environment to Julia;

    since Julia calls directly Python scripts, a very large set ofprogramming resources is available;

    provides a familiar interactive development environment.

    23 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    IJulia Notebook

    24 de 26 Caeiro The Python and Julia Programming Languages

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Speed Comparison

    According to the Julia site (http://julialang.org/), somemicro-benchmarks results were obtained on a single core (serialexecution) on an Intel Xeon CPU E7-8850 2.00GHz CPU with 1TBof 1067MHz DDR3 RAM, running Linux:

    To digest with some care...

    25 de 26 Caeiro The Python and Julia Programming Languages

    http://julialang.org/

  • Numerical Signal ProcessingNumerical Programming Languages

    PythonJulia

    Conclusion

    Python is still inspiring new programming languages proposals

    Julia is a new scientific programming language proposal (stillat version 0.30) but soon expected to jump to 1.0, alreadybeing used to teach numerical programming at the MIT

    Julia is modern dynamic programming language

    Julia designed to be faster than Matlab and Python andwith better support por multiprocessing and paralelism

    is still at its infancy...

    THANK YOU

    26 de 26 Caeiro The Python and Julia Programming Languages

    Numerical Signal ProcessingNumerical Programming LanguagesPythonJulia