MATLAB–Python cheatsheet¶
Dependencies and Setup¶
In the Python code we assume that you have already run import numpy as np
Creating Vectors¶
Operation |
MATLAB |
Python |
---|---|---|
Row vector: size (1, n) |
A = [1 2 3]
|
A = np.array([1, 2, 3]).reshape(1, 3)
|
Column vector: size (n, 1) |
A = [1; 2; 3]
|
A = np.array([1, 2, 3]).reshape(3, 1)
|
1d array: size (n, ) |
Not possible |
A = np.array([1, 2, 3])
|
Integers from j to n with step size k |
A = j:k:n
|
A = np.arange(j, n+1, k)
|
Linearly spaced vector of k points |
A = linspace(1, 5, k)
|
A = np.linspace(1, 5, k)
|
Creating Matrices¶
Operation |
MATLAB |
Python |
---|---|---|
Create a matrix |
A = [1 2; 3 4]
|
A = np.array([[1, 2], [3, 4]])
|
2 x 2 matrix of zeros |
A = zeros(2, 2)
|
A = np.zeros((2, 2))
|
2 x 2 matrix of ones |
A = ones(2, 2)
|
A = np.ones((2, 2))
|
2 x 2 identity matrix |
A = eye(2, 2)
|
A = np.eye(2)
|
Diagonal matrix |
A = diag([1 2 3])
|
A = np.diag([1, 2, 3])
|
Uniform random numbers |
A = rand(2, 2)
|
A = np.random.rand(2, 2)
|
Normal random numbers |
A = randn(2, 2)
|
A = np.random.randn(2, 2)
|
Sparse Matrices |
A = sparse(2, 2)
A(1, 2) = 4
A(2, 2) = 1
|
from scipy.sparse import coo_matrix
A = coo_matrix(([4, 1],
([0, 1], [1, 1])),
shape=(2, 2))
|
Tridiagonal Matrices |
A = [1 2 3 NaN;
4 5 6 7;
NaN 8 9 0]
spdiags(A',[-1 0 1], 4, 4)
|
import sp.sparse as sp
diagonals = [[4, 5, 6, 7], [1, 2, 3], [8, 9, 10]]
sp.diags(diagonals, [0, -1, 2]).toarray()
|
Manipulating Vectors and Matrices¶
Operation |
MATLAB |
Python |
---|---|---|
Transpose |
A.'
|
A.T
|
Complex conjugate transpose (Adjoint) |
A'
|
A.conj()
|
Concatenate horizontally |
A = [[1 2] [1 2]]
or A = horzcat([1 2], [1 2])
|
B = np.array([1, 2])
A = np.hstack((B, B))
|
Concatenate vertically |
A = [[1 2]; [1 2]]
or A = vertcat([1 2], [1 2])
|
B = np.array([1, 2])
A = np.vstack((B, B))
|
Reshape (to 5 rows, 2 columns) |
A = reshape(1:10, 5, 2)
|
A = A.reshape(5, 2)
|
Convert matrix to vector |
A(:)
|
A = A.flatten()
|
Flip left/right |
fliplr(A)
|
np.fliplr(A)
|
Flip up/down |
flipud(A)
|
np.flipud(A)
|
Repeat matrix (3 times in the row dimension, 4 times in the column dimension) |
repmat(A, 3, 4)
|
np.tile(A, (4, 3))
|
Preallocating/Similar |
x = rand(10)
y = zeros(size(x, 1), size(x, 2))
N/A similar type |
x = np.random.rand(3, 3)
y = np.empty_like(x)
# new dims
y = np.empty((2, 3))
|
Broadcast a function over a collection/matrix/vector |
f = @(x) x.^2
g = @(x, y) x + 2 + y.^2
x = 1:10
y = 2:11
f(x)
g(x, y)
Functions broadcast directly |
def f(x):
return x**2
def g(x, y):
return x + 2 + y**2
x = np.arange(1, 10, 1)
y = np.arange(2, 11, 1)
f(x)
g(x, y)
Functions broadcast directly |
Accessing Vector/Matrix Elements¶
Operation |
MATLAB |
Python |
---|---|---|
Access one element |
A(2, 2)
|
A[1, 1]
|
Access specific rows |
A(1:4, :)
|
A[0:4, :]
|
Access specific columns |
A(:, 1:4)
|
A[:, 0:4]
|
Remove a row |
A([1 2 4], :)
|
A[[0, 1, 3], :]
|
Diagonals of matrix |
diag(A)
|
np.diag(A)
|
Get dimensions of matrix |
[nrow ncol] = size(A)
|
nrow, ncol = np.shape(A)
|
Mathematical Operations¶
Operation |
MATLAB |
Python |
---|---|---|
Dot product |
dot(A, B)
|
np.dot(A, B) or A @ B
|
Matrix multiplication |
A * B
|
A @ B
|
Inplace matrix multiplication |
Not possible |
x = np.array([1, 2]).reshape(2, 1)
A = np.array(([1, 2], [3, 4]))
y = np.empty_like(x)
np.matmul(A, x, y)
|
Element-wise multiplication |
A .* B
|
A * B
|
Matrix to a power |
A^2
|
np.linalg.matrix_power(A, 2)
|
Matrix to a power, elementwise |
A.^2
|
A**2
|
Inverse |
inv(A)
or A^(-1)
|
np.linalg.inv(A)
|
Determinant |
det(A)
|
np.linalg.det(A)
|
Eigenvalues and eigenvectors |
[vec, val] = eig(A)
|
val, vec = np.linalg.eig(A)
|
Euclidean norm |
norm(A)
|
np.linalg.norm(A)
|
Solve linear system (when is square) |
A\b
|
np.linalg.solve(A, b)
|
Solve least squares problem (when is rectangular) |
A\b
|
np.linalg.lstsq(A, b)
|
Sum / max / min¶
Operation |
MATLAB |
Python |
---|---|---|
Sum / max / min of each column |
sum(A, 1)
max(A, [], 1)
min(A, [], 1)
|
sum(A, 0)
np.amax(A, 0)
np.amin(A, 0)
|
Sum / max / min of each row |
sum(A, 2)
max(A, [], 2)
min(A, [], 2)
|
sum(A, 1)
np.amax(A, 1)
np.amin(A, 1)
|
Sum / max / min of entire matrix |
sum(A(:))
max(A(:))
min(A(:))
|
np.sum(A)
np.amax(A)
np.amin(A)
|
Cumulative sum / max / min by row |
cumsum(A, 1)
cummax(A, 1)
cummin(A, 1)
|
np.cumsum(A, 0)
np.maximum.accumulate(A, 0)
np.minimum.accumulate(A, 0)
|
Cumulative sum / max / min by column |
cumsum(A, 2)
cummax(A, 2)
cummin(A, 2)
|
np.cumsum(A, 1)
np.maximum.accumulate(A, 1)
np.minimum.accumulate(A, 1)
|
Programming¶
Operation |
MATLAB |
Python |
---|---|---|
Comment one line |
% This is a comment
|
# This is a comment
|
Comment block |
%{
Comment block
%}
|
# Block
# comment
# following PEP8
|
For loop |
for i = 1:N
% do something
end
|
for i in range(n):
# do something
|
While loop |
while i <= N
% do something
end
|
while i <= N:
# do something
|
If |
if i <= N
% do something
end
|
if i <= N:
# do something
|
If / else |
if i <= N
% do something
else
% do something else
end
|
if i <= N:
# do something
else:
# so something else
|
Print text and variable |
x = 10
fprintf('x = %d \n', x)
|
x = 10
print(f'x = {x}')
|
Function: anonymous |
f = @(x) x^2
|
f = lambda x: x**2
|
Function |
function out = f(x)
out = x^2
end
|
def f(x):
return x**2
|
Tuples |
t = {1 2.0 "test"}
t{1}
Can use cells but watch performance |
t = (1, 2.0, "test")
t[0]
|
Named Tuples/ Anonymous Structures |
m.x = 1
m.y = 2
m.x
|
from collections import namedtuple
mdef = namedtuple('m', 'x y')
m = mdef(1, 2)
m.x
|
Closures |
a = 2.0
f = @(x) a + x
f(1.0)
|
a = 2.0
def f(x):
return a + x
f(1.0)
|
Inplace Modification |
No consistent or simple syntax to achieve this |
def f(x):
x **=2
return
x = np.random.rand(10)
f(x)
|