\begin{itemize} \item For example Matlab team claims that Python is bad for scientific applications because we need ``add-on libraries for performing even basic mathematics'' and that the ``quality, comprehensiveness, and maintenance [of these libraries] varies widely''. These add-on libraries are in particular \numpy, \pack{scipy} and IPython which are very mature, robust, well documented and which are fully integrated into the scientific Python ecosystem. \item Matlab team presents the scientific ecosystem as being developed by amateurs and therefore being basically badly documented and buggy. Python for science today is not old-school open-source. Firstly, new open-source methods give impressive results in term of code quality and secondly, most of the big Python packages are not authored mainly by amateurs, but are supported by companies or research institutes: Numba (Anaconda, Nvidia), TensorFlow (Google), Scikit-learn (INRIA), Mercurial (Facebook). \item Matlab team claims that Matlab ``is the more natural way to express computational mathematics''. We are skeptical. Let us compare code. First, the Matlab version: \begin{minted}[fontsize=\footnotesize]{matlab} % matrix creation (row's shape is [1, 3]) row = [1 2 3]; % matrix transposition col = row'; % matrix multiplication inner = row * col; outer = col * row; % element-by-element multiplication and division row2 = row .* (row + 1); result = row2 ./ (row2 + 1); \end{minted} and then the equivalent code in Python 3.6 (using \numpy): \begin{minted}[fontsize=\footnotesize]{python} import numpy as np # creation of a 1D array with shape [1, 3] row = np.array([1, 2, 3], ndmin=2) # matrix transposition col = row.T # matrix multiplication with the symbol @ inner = row @ col outer = col @ row # element-by-element multiplication and division row2 = row * (row + 1) result = row2 / (row2 + 1) \end{minted} We see that Matlab and \numpy\ syntaxes are actually very similar. Most Python codes start with import statements and here we have to import the package \numpy. It is of course possible to start an IPython session with \numpy already imported. % The \numpy syntax for creating the object \codeinline{row} is longer and more explicit. Instead, in Matlab, the user writes a 1d object (here a list of 3 numbers) and obtain a 2d object. Actually, even a integer is a 2d object in Matlab (\codeinline{size(1)} returns \codeinline{[1, 1]}). % Except from these differences, we see that the \numpy code is actually as clear and ``natural'' as the Matlab code. \item Matlab team claims that teaching is mostly done in Matlab and that scientific books mostly use Matlab. Both statements are nowadays wrong. Most programming teaching is now based on Python and there are now several books on scientific applications based on Python. There are also much more videos on Python than on Matlab: a search on Youtube (in early 2018) returns 3,800,000 videos on Python and 900,000 on Matlab. \item Matlab team praises their support and claims that no support exists for Python. This is now completely wrong. Firstly, the support by the community is both very reactive and of very good level (for example in Stack Overflow, and issues page on major repositories) and secondly, it is now possible to pay companies to get professional support on scientific Python (for example \href{https://software.intel.com/en-us/distribution-for-python/get-help}{Intel} and \href{https://www.anaconda.com/enterprise/}{Anaconda}). \item Matlab claims to be faster. Matlab team tends to compare well optimized Matlab to badly written scientific Python not using adequate tools to speed-up computations. % In our experience, the translation to Python of a real Matlab code used in a laboratory computes faster just by using only the basic scientific packages and without any fancy tools. It is primarily because the principle of Matlab is to keep the users with stuck with old habits and with little room to improve their level. % av: we should refrain from mocking users :) % With the tools available today, with little effort we can get a very efficient code in Python. \end{itemize}