\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}