NumpyMatlab

Matlab and Numpy/Python functions side by side

Vidar Bronken Gundersen, @ mathesaurus.sf.net originally created an excellent Matlab-Python side-by-side comparison table which I think is very useful for some moving from Matlab to Python. However, it seems that the page was last updated in 2007, and a whole lot has changed since then. So, I have decided to update his table here. Please note that I have duly attributed the source of this table to him. Also, here is a copy of the copyright text from his website.

©2006 Vidar Bronken Gundersen, /mathesaurus.sf.net
Permission is granted to copy, distribute and/or modify this document as long as the above attribution is retained.

In addition to the mathesaurus.sf.net website, one should also refer to “NumPy for Matlab Users” at Scipy.org which too has very highly valubable information for anyone migrating from Matlab to Python/Numpy.

It is assumed that the required modules in Python has been imported in the following way:

import numpy as np
import scipy as sp
import scipy.linalg as spl
import matplotlib.pyplot as plt

Help

MATLAB/Octave

Python

Description

dochelp -i % browse with Info help() Browse help interactively
help help or doc doc help Help on using help
help plot help(plot) or ?plot Help for a function
help splines or doc splines help(pylab) Help for a toolbox/library package
demo Demonstration examples

Searching available documentation

MATLAB/Octave

Python

Description

lookfor plot np.lookfor('plot') Search help files
help help(); modules [Numeric] List available packages
which plot help(plot) Locate functions

Using interactively

MATLAB/Octave

Python

Description

octave -q ipython -pylab Start session
TAB or M-? TAB Auto completion
foo(.m) execfile('foo.py') or run foo.py Run code from file
history hist -n Command history
diary on [..] diary off Save command history
exit or quit CTRL-D
CTRL-Z # windows
sys.exit()
End session

Operators

MATLAB/Octave

Python

Description

help - Help on operator syntax

Arithmetic operators

MATLAB/Octave

Python

Description

a=1; b=2; a=1; b=1 Assignment; defining a number
a + b a + b or add(a,b) Addition
a - b a - b or subtract(a,b) Subtraction
a * b a * b or multiply(a,b) Multiplication
a / b a / b or divide(a,b) Division
a .^ b a ** b
power(a,b)
pow(a,b)
Power, a^b
rem(a,b) a % b
remainder(a,b)
fmod(a,b)
Remainder
a+=1 a+=b or add(a,b,a) In place operation to save array creation overhead
factorial(a) Factorial, n!

Relational operators

MATLAB/Octave

Python

Description

a == b a == b or equal(a,b) Equal
a < b a < b or less(a,b) Less than
a > b a > b or greater(a,b) Greater than
a <= b a <= b or less_equal(a,b) Less than or equal
a >= b a >= b or greater_equal(a,b) Greater than or equal
a ~= b a != b or not_equal(a,b) Not Equal

Logical operators

MATLAB/Octave

Python

Description

a && b a and b Short-circuit logical AND
a || b a or b Short-circuit logical OR
a & b or and(a,b) logical_and(a,b) or a and b Element-wise logical AND
a | b or or(a,b) logical_or(a,b) or a or b Element-wise logical OR
xor(a, b) logical_xor(a,b) Logical EXCLUSIVE OR
~a or not(a)
~a or !a
logical_not(a) or not a Logical NOT
any(a) True if any element is nonzero
all(a) True if all elements are nonzero

Root and logarithm

MATLAB/Octave

Python

Description

sqrt(a) math.sqrt(a) Square root
log(a) math.log(a) Logarithm, base e (natural)
log10(a) math.log10(a) Logarithm, base 10
log2(a) math.log(a, 2) Logarithm, base 2 (binary)
exp(a) math.exp(a) Exponential function

Round off

MATLAB/Octave

Python

Description

round(a) around(a) or math.round(a) Round
ceil(a) ceil(a) Round up
floor(a) floor(a) Round down
fix(a) fix(a) Round towards zero

Mathematical constants

MATLAB/Octave

Python

Description

pi math.pi \pi=3.141592
exp(1) math.e or math.exp(1) e=2.718281

Missing values; IEEE-754 floating point status flags

MATLAB/Octave

Python

Description

NaN nan Not a Number
Inf inf Infinity, \infty
plus_inf Infinity, +\infty
minus_inf Infinity, -\infty
plus_zero Plus zero, +0
minus_zero Minus zero, -0

Complex numbers

MATLAB/Octave

Python

Description

i z = 1j Imaginary unit
z = 3+4i z = 3+4j or z = complex(3,4) A complex number, 3+4i
abs(z) abs(3+4j) Absolute value (modulus)
real(z) z.real Real part
imag(z) z.imag Imaginary part
arg(z) Argument
conj(z) z.conj(); z.conjugate() Complex conjugate

Trigonometry

MATLAB/Octave

Python

Description

atan(y/x) atan(y/x) Inverse tangent, \arctan(y/x). The range is in [-\pi/2, \pi/2]
atan2(y,x) atan2(y,x) Four-quadrant inverse tangent, \arctan(y/x). It considers the signs of x and y to determine the specific quadrant. The range is in [-\pi, \pi]
hypot(x,y) Hypotenus; Euclidean distance

Generate random numbers

MATLAB/Octave

Python

Description

rand(1,10) random.random((10,))
random.uniform((10,))
Uniform distribution
2+5*rand(1,10) random.uniform(2,7,(10,)) Uniform: Numbers between 2 and 7
rand(6) random.uniform(0,1,(6,6)) Uniform: 6,6 array
randn(1,10) random.standard_normal((10,)) Normal distribution

Vectors

MATLAB/Octave

Python

Description

a=[2 3 4 5]; a=array([2,3,4,5]) Row vector, 1 \times n-matrix
adash=[2 3 4 5]'; array([2,3,4,5])[:,NewAxis]
array([2,3,4,5]).reshape(-1,1)
r_[1:10,'c']
Column vector, m \times 1-matrix

Sequences

MATLAB/Octave

Python

Description

1:10 arange(1,11, dtype=Float)
range(1,11)
1,2,3, … ,10
0:9 arange(10.) 0.0,1.0,2.0, … ,9.0
1:3:10 arange(1,11,3) 1,4,7,10
10:-1:1 arange(10,0,-1) 10,9,8, … ,1
10:-3:1 arange(10,0,-3) 10,7,4,1
linspace(1,10,7) linspace(1,10,7) Linearly spaced vector of n=7 points
reverse(a) a[::-1] or Reverse
a(:) = 3 a.fill(3), a[:] = 3 Set all values to same scalar value

Concatenation (vectors)

MATLAB/Octave

PYTHON

Description

[a a] concatenate((a,a)) Concatenate two vectors
[1:4 a] concatenate((range(1,5),a), axis=1)

Repeating elements of an array

MATLAB/Octave

Python

Description

kron(a,ones(1,3)) a.repeat(3) or kron(a,ones(3)) [1, 1, 1, 2, 2, 2, 3, 3, 3,]
where, a=[1,2,3]
kron(a,ones(3,1)) kron(a,ones((3,1))) or repeat(matrix(a),3,0) or tile(a,(3,1)) [[ 1, 2, 3],
[ 1, 2, 3],
[ 1, 2, 3]]

Note that the second Python option (repeat(...)) outputs a matrix and it works because each row is considered as an element of the array which gets repeated.
a.repeat(a) or np.repeat(a,a) [1, 2, 2, 3, 3, 3]
x.repeat(2) or np.repeat(x,2) [0, 0, 1, 1, 2, 2, 3, 3]
where x =[[0, 1],
[2, 3]]
x.repeat(2,0) or np.repeat(x,2,0) [[0, 1],
[0, 1],
[2, 3],
[2, 3]]
x.repeat(2,1) or np.repeat(x,2,1) [[0, 0, 1, 1],
[2, 2, 3, 3]]

Miss those elements out

MATLAB/Octave

Python

Description

a(2:end) a[1:] miss the first element
a([1:9]) miss the tenth element
a(end) a[-1] last element
a(end-1:end) a[-2:] last two elements

Maximum and minimum

MATLAB/Octave

Python

Description

max(a,b) maximum(a,b) pairwise max
max([a b]) concatenate((a,b)).max() max of all values in two vectors
[v,i] = max(a) v,i = a.max(0),a.argmax(0)

Vector multiplication

MATLAB/Octave

Python

Description

a.*a a*a Multiply two vectors
dot(u,v) dot(u,v) Vector dot product, u \cdot v

Matrices

MATLAB/Octave

Python

Description

a = [2 3;4 5] a = array([[2,3],[4,5]]) Define a matrix

Concatenation (matrices); rbind and cbind

MATLAB/Octave

Python

Description

[a ; b] concatenate((a,b), axis=0)
vstack((a,b))
Bind rows
[a , b] concatenate((a,b), axis=1)
hstack((a,b))
Bind columns
concatenate((a,b), axis=2)
dstack((a,b))
Bind slices (three-way arrays)
[a(:), b(:)] concatenate((a,b), axis=None) Concatenate matrices into one vector
[1:4 ; 1:4] concatenate((r_[1:5],r_[1:5])).reshape(2,-1)
vstack((r_[1:5],r_[1:5]))
Bind rows (from vectors)
[1:4 ; 1:4]' Bind columns (from vectors)

Array creation

MATLAB/Octave

Python

Description

zeros(3,5) zeros((3,5),Float) 0 filled array
zeros((3,5)) 0 filled array of integers
ones(3,5) ones((3,5),Float) 1 filled array
ones(3,5)*9 Any number filled array
eye(3) identity(3) Identity matrix
diag([4 5 6]) diag((4,5,6)) Diagonal
magic(3) Magic squares; Lo Shu
a = empty((3,3)) Empty array

Reshape and flatten matrices

MATLAB/Octave

Python

Description

reshape(1:6,3,2)'; arange(1,7).reshape(2,-1)
a.setshape(2,3)
Reshaping (rows first)
reshape(1:6,2,3); arange(1,7).reshape(-1,2).transpose() Reshaping (columns first)
a'(:) a.flatten() or Flatten to vector (by rows, like comics)
a(:) a.flatten(1) Flatten to vector (by columns)
vech(a) Flatten upper triangle (by columns)

Shared data (slicing)

MATLAB/Octave

Python

Description

b = a b = a.copy() Copy of a

Indexing and accessing elements (Python: slicing)

MATLAB/Octave

Python

Description

a = [ 11 12 13 14 ...
21 22 23 24 ...
31 32 33 34 ]
a = array([[ 11, 12, 13, 14 ],
[ 21, 22, 23, 24 ],
[ 31, 32, 33, 34 ]])
Input is a 3,4 array
a(2,3) a[1,2] Element 2,3 (row,col)
a(1,:) a[0,] First row
a(:,1) a[:,0] First column
a([1 3],[1 4]); a.take([0,2]).take([0,3], axis=1) Array as indices
a(2:end,:) a[1:,] All, except first row
a(end-1:end,:) a[-2:,] Last two rows
a(1:2:end,:) a[::2,:] Strides: Every other row
a[...,2] Third in last dimension (axis)
a(:,[1 3 4]) a.take([0,2,3],axis=1) Remove one column
a.diagonal(offset=0) Diagonal

Assignment

MATLAB/Octave

Python

Description

a(:,1) = 99 a[:,0] = 99
a(:,1) = [99 98 97]' a[:,0] = array([99,98,97])
a(a>90) = 90; (a>90).choose(a,90)
a.clip(min=None, max=90)
Clipping: Replace all elements over 90
a.clip(min=2, max=5) Clip upper and lower values

Linear Algebra, transpose and inverse

MATLAB/Octave

Python

Description

a' a.conj().transpose() Transpose
a.' or transpose(a) a.transpose() Non-conjugate transpose
det(a) linalg.det(a) or Determinant
inv(a) linalg.inv(a) or Inverse
pinv(a) linalg.pinv(a) Pseudo-inverse
norm(a) norm(a) Norms
eig(a) linalg.eig(a)[0] Eigenvalues
svd(a) linalg.svd(a) Singular values
chol(a) linalg.cholesky(a) Cholesky factorization
[L,U,P]=lu(a) P,L,U = spl.linalg.lu(a) LU factorization. Note that P(matlab) == Transpose(P(scipy))
[v,l] = eig(a) linalg.eig(a)[1] Eigenvectors
rank(a) np.rank(a) Rank

Sum

MATLAB/Octave

Python

Description

sum(a) a.sum(axis=0) Sum of each column
sum(a') a.sum(axis=1) Sum of each row
sum(sum(a)) a.sum() Sum of all elements
a.trace(offset=0) Sum along diagonal
cumsum(a) a.cumsum(axis=0) Cumulative sum (columns)

Sorting

MATLAB/Octave

Python

Description

a = [ 4 3 2 ; 2 8 6 ; 1 4 7 ] a = array([[4,3,2],[2,8,6],[1,4,7]]) Example data
sort(a(:)) a.ravel().sort() or Flat and sorted
sort(a) a.sort(axis=0) or msort(a) Sort each column
sort(a')' a.sort(axis=1) Sort each row
sortrows(a,1) a[a[:,0].argsort(),] Sort rows (by first row)
a.ravel().argsort() Sort, return indices
a.argsort(axis=0) Sort each column, return indices
a.argsort(axis=1) Sort each row, return indices

Maximum and minimum

MATLAB/Octave

Python

Description

max(a) a.max(0) or amax(a [,axis=0]) max in each column
max(a') a.max(1) or amax(a, axis=1) max in each row
max(max(a)) a.max() or max in array
[v i] = max(a) return indices, i
max(b,c) maximum(b,c) pairwise max
cummax(a)
a.ptp(); a.ptp(0) max-to-min range

Matrix manipulation

MATLAB/Octave

Python

Description

fliplr(a) fliplr(a) or a[:,::-1] Flip left-right
flipud(a) flipud(a) or a[::-1,] Flip up-down
rot90(a) rot90(a) Rotate 90 degrees
repmat(a,2,3)
kron(ones(2,3),a)
kron(ones((2,3)),a) also tile(a,(2,3)) Repeat matrix: [ a a a ; a a a ]
triu(a) triu(a) Triangular, upper
tril(a) tril(a) Triangular, lower

Equivalents to “size”

MATLAB/Octave

Python

Description

size(a) a.shape or a.getshape() Matrix dimensions
size(a,2) or length(a) a.shape[1] or size(a, axis=1) Number of columns
length(a(:)) a.size or size(a[, axis=None]) Number of elements
ndims(a) a.ndim Number of dimensions
a.nbytes Number of bytes used in memory

Matrix- and elementwise- multiplication

MATLAB/Octave

Python

Description

a .* b a * b or multiply(a,b) Elementwise operations
a * b matrixmultiply(a,b) Matrix product (dot product)
inner(a,b) or Inner matrix vector multiplication $a\cdot b’$
outer(a,b) or Outer product
kron(a,b) kron(a,b) Kronecker product
a / b Matrix division, $b{\cdot}a^{-1}$
a \ b linalg.solve(a,b) Left matrix division, $b^{-1}{\cdot}a$ \newline (solve linear equations)
vdot(a,b) Vector dot product
cross(a,b) Cross product

Find; conditional indexing

MATLAB/Octave

Python

Description

find(a) a.ravel().nonzero() Non-zero elements, indices
[i j] = find(a) (i,j) = a.nonzero()
(i,j) = where(a!=0)
Non-zero elements, array indices
[i j v] = find(a) v = a.compress((a!=0).flat)
v = extract(a!=0,a)
Vector of non-zero values
find(a>5.5) (a>5.5).nonzero() Condition, indices
a.compress((a>5.5).flat) Return values
a .* (a>5.5) where(a>5.5,0,a) or a * (a>5.5) Zero out elements above 5.5
a.put(2,indices) Replace values

Multi-way arrays

MATLAB/Octave

Python

Description

a = cat(3, [1 2; 1 2],[3 4; 3 4]); a = array([[[1,2],[1,2]], [[3,4],[3,4]]]) Define a 3-way array
a(1,:,:) a[0,...]

File input and output

MATLAB/Octave

Python

Description

f = load('data.txt') f = fromfile("data.txt")
f = load("data.txt")
Reading from a file (2d)
f = load('data.txt') f = load("data.txt") Reading from a file (2d)
x = dlmread('data.csv', ';') f = load('data.csv', delimiter=';') Reading fram a CSV file (2d)
save -ascii data.txt f save('data.csv', f, fmt='%.6f', delimiter=';') Writing to a file (2d)
f.tofile(file='data.csv', format='%.6f', sep=';') Writing to a file (1d)
f = fromfile(file='data.csv', sep=';') Reading from a file (1d)

Plotting

Basic x-y plots

MATLAB/Octave

Python

Description

plot(a) plot(a) 1d line plot
plot(x(:,1),x(:,2),'o') plot(x[:,0],x[:,1],'o') 2d scatter plot
plot(x1,y1, x2,y2) plot(x1,y1,'bo', x2,y2,'go') Two graphs in one plot
plot(x1,y1)
hold on
plot(x2,y2)
plot(x1,y1,'o')
plot(x2,y2,'o')
show() # as normal
Overplotting: Add new plots to current
subplot(211) subplot(211) subplots
plot(x,y,'ro-') plot(x,y,'ro-') Plotting symbols and color

Axes and titles

MATLAB/Octave

Python

Description

grid on grid() Turn on grid lines
axis equal
axis('equal')
replot
figure(figsize=(6,6)) 1:1 aspect ratio
axis([ 0 10 0 5 ]) axis([ 0, 10, 0, 5 ]) Set axes manually
title('title')
xlabel('x-axis')
ylabel('y-axis')
Axis labels and titles
text(2,25,'hello') Insert text

Log plots

MATLAB/Octave

Python

Description

semilogy(a) semilogy(a) logarithmic y-axis
semilogx(a) semilogx(a) logarithmic x-axis
loglog(a) loglog(a) logarithmic x and y axes

Filled plots and bar plots

MATLAB/Octave

Python

Description

fill(t,s,'b', t,c,'g')
% fill has a bug?
fill(t,s,'b', t,c,'g', alpha=0.2) Filled plot

Functions

MATLAB/Octave

Python

Description

f = @(x) x.^2; lambda x: x**2 Anonymous Functions. MATLAB also uses “inline” keyword to construct an inline object. For example inline(‘x^2’). Note that the inline function will be removed from MATLAB in future.
ezplot(f,[0,40])
fplot('sin(x/3) - cos(x/5)',[0,40])
% no ezplot
x = np.arange(0,40,.5)
y = sin(x/3) - cos(x/5)
plot(x,y, 'o')
Plot a function for given range

Polar plots

MATLAB/Octave

Python

Description

theta = 0:.001:2*pi;
r = sin(2*theta);
theta = arange(0,2*pi,0.001)
r = sin(2*theta)
polar(theta, rho) polar(theta, rho)

Histogram plots

MATLAB/Octave

Python

Description

hist(randn(1000,1))
hist(randn(1000,1), -4:4)
plot(sort(a))

3-D Data

Contour and image plots

MATLAB/Octave

Python

Description

contour(z) levels, colls = contour(Z, V,
origin='lower', extent=(-3,3,-3,3))
clabel(colls, levels, inline=1,
fmt='%1.1f', fontsize=10)
Contour plot
contourf(z); colormap(gray) contourf(Z, V,
cmap=cm.gray,
origin='lower',
extent=(-3,3,-3,3))
Filled contour plot
image(z)
colormap(gray)
im = imshow(Z,
interpolation='bilinear',
origin='lower',
extent=(-3,3,-3,3))
Plot image data
# imshow() and contour() as above Image with contours
quiver() quiver() Direction field vectors

Perspective plots of surfaces over the x-y plane

MATLAB/Octave

Python

Description

n=-2:.1:2;
[x,y] = meshgrid(n,n);
z=x.*exp(-x.^2-y.^2);
n=np.arange(-2,2,.1)
[x,y] =np.meshgrid(n,n)
z = x*power(math.e,-x**2-y**2)
mesh(z) Mesh plot
surf(x,y,z) or surfl(x,y,z)
% no surfl()
Surface plot

Scatter (cloud) plots

MATLAB/Octave

Python

Description

plot3(x,y,z,'k+') 3d scatter plot

Save plot to a graphics file

MATLAB/Octave

Python

Description

plot(1:10)
print -depsc2 foo.eps
gset output "foo.eps"
gset terminal postscript eps
plot(1:10)
savefig('foo.eps') PostScript
savefig('foo.pdf') PDF
savefig('foo.svg') SVG (vector graphics for www)
print -dpng foo.png savefig('foo.png') PNG (raster graphics)

Data analysis

Set membership operators

MATLAB/Octave

Python

Description

a = [ 1 2 2 5 2 ];
b = [ 2 3 4 ];
a = array([1,2,2,5,2])
b = array([2,3,4])
a = set([1,2,2,5,2])
b = set([2,3,4])
Create sets
unique(a) unique1d(a)
unique(a)
set(a)
Set unique
union(a,b) union1d(a,b)
a.union(b)
Set union
intersect(a,b) intersect1d(a)
a.intersection(b)
Set intersection
setdiff(a,b) setdiff1d(a,b)
a.difference(b)
Set difference
setxor(a,b) setxor1d(a,b)
a.symmetric_difference(b)
Set exclusion
ismember(2,a) 2 in a
setmember1d(2,a)
contains(a,2)
True for set member

Statistics

MATLAB/Octave

Python

Description

mean(a) a.mean(axis=0)
mean(a [,axis=0])
Average
median(a) median(a) or median(a [,axis=0]) Median
std(a) a.std(axis=0) or std(a [,axis=0]) Standard deviation
var(a) a.var(axis=0) or var(a) Variance
corr(x,y) correlate(x,y) or corrcoef(x,y) Correlation coefficient
cov(x,y) cov(x,y) Covariance

Interpolation and regression

MATLAB/Octave

Python

Description

z = polyval(polyfit(x,y,1),x)
plot(x,y,'o', x,z ,'-')
(a,b) = polyfit(x,y,1)
plot(x,y,'o', x,a*x+b,'-')
Straight line fit
a = x\y linalg.lstsq(x,y) Linear least squares $y = ax + b$
polyfit(x,y,3) polyfit(x,y,3) Polynomial fit

Non-linear methods

Polynomials, root finding

MATLAB/Octave

Python

Description

poly() Polynomial
roots([1 -1 -1]) roots() Find zeros of polynomial
f = inline('1/x - (x-1)')
fzero(f,1)
Find a zero near $x = 1$
solve('1/x = x-1') Solve symbolic equations
polyval([1 2 1 2],1:10) polyval(array([1,2,1,2]),arange(1,11)) Evaluate polynomial

Differential equations

MATLAB/Octave

Python

Description

diff(a) diff(x, n=1, axis=0) Discrete difference function and approximate derivative
Solve differential equations

Fourier analysis

MATLAB/Octave

Python

Description

fft(a) fft(a) or Fast fourier transform
ifft(a) ifft(a) or Inverse fourier transform
convolve(x,y) Linear convolution

Symbolic algebra; calculus

MATLAB/Octave

Python

Description

factor() Factorization

Programming

MATLAB/Octave

Python

Description

.m .py Script file extension
%
% or #
# Comment symbol (rest of line)
% must be in MATLABPATH
% must be in LOADPATH
from pylab import * Import library functions
string='a=234';
eval(string)
string="a=234"
eval(string)
Eval

Loops

MATLAB/Octave

Python

Description

for i=1:5; disp(i); end for i in range(1,6): print(i) for-statement
for i=1:5
disp(i)
disp(i*2)
end
for i in range(1,6):
print(i)
print(i*2)
Multiline for statements

Conditionals

MATLAB/Octave

Python

Description

if 1>0 a=100; end if 1>0: a=100 if-statement
if 1>0 a=100; else a=0; end if-else-statement

Debugging

MATLAB/Octave

Python

Description

ans Most recent evaluated expression
whos or who List variables loaded into memory
clear x or clear [all] Clear variable $x$ from memory
disp(a) print a Print

Working directory and OS

MATLAB/Octave

Python

Description

dir or ls os.listdir(".") List files in directory
what grep.grep("*.py") List script files in directory
pwd os.getcwd() Displays the current working directory
cd foo os.chdir('foo') Change working directory
!notepad
system("notepad")
os.system('notepad')
os.popen('notepad')
Invoke a System Command

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s