ndims(a)
ndim(a)ora.ndim
get the
number of dimensions of an array
numel(a)
size(a)ora.size
get the
number of elements of an array
size(a)
shape(a)ora.shape
get
the “size”
of the matrix
size(a,n)
a.shape[n-1]
get the
number of elements of the n-th dimension of
arraya.
(Note that MATLAB® uses 1 based indexing while Python uses 0 based
indexing, See note
[ 1 2 3; 4 5 6 ]
array([[1.,2.,3.], [4.,5.,6.]])
2x3
matrix literal
[ a b; c d ]
vstack([hstack([a,b]), hstack([c,d])])orbmat('a
b; c d').A
construct
a matrix from blocksa,b,c,
andd
a(end)
a[-1]
access
last element in the 1xn matrixa
a(2,5)
a[1,4]
access
element in second row, fifth column
a(2,:)
a[1]ora[1,:]
entire
second row ofa
a(1:5,:)
a[0:5]ora[:5]ora[0:5,:]
the first
five rows ofa
a(end-4:end,:)
a[-5:]
the last
five rows ofa
a(1:3,5:9)
a[0:3][:,4:9]
rows one
to three and columns five to nine
ofa.
This gives read-only access.
a([2,4,5],[1,3])
a[ix_([1,3,4],[0,2])]
rows 2,4
and 5 and columns 1 and 3. This allows the matrix to be modified,
and doesn’t
require a regular slice.
a(3:2:21,:)
a[ 2:21:2,:]
every
other row ofa,
starting with the third and going to the twenty-first
a(1:2:end,:)
a[ ::2,:]
every
other row ofa,
starting with the first
a(end:-1:1,:)orflipud(a)
a[ ::-1,:]
awith
rows in reverse order
a([1:end 1],:)
a[r_[:len(a),0]]
awith
copy of the first row appended to the end
a.'
a.transpose()ora.T
transpose
ofa
a'
a.conj().transpose()ora.conj().T
conjugate
transpose ofa
a * b
a.dot(b)
matrix
multiply
a .* b
a * b
element-wise
multiply
a./b
a/b
element-wise
divide
a.^3
a**3
element-wise
exponentiation
(a>0.5)
(a>0.5)
matrix
whose i,jth element is (a_ij > 0.5). The Matlab result is an
array of 0s and 1s. The NumPy result is an array of the boolean
valuesFalseandTrue.
find(a>0.5)
nonzero(a>0.5)
find the
indices where (a>
0.5)
a(:,find(v>0.5))
a[:,nonzero(v>0.5)[0]]
extract
the columms ofawhere
vector v > 0.5
a(:,find(v>0.5))
a[:,v.T>0.5]
extract
the columms ofawhere
column vector v > 0.5
a(a<0.5)=0
a[a<0.5]=0
awith
elements less than 0.5 zeroed out
a .* (a>0.5)
a * (a>0.5)
awith
elements less than 0.5 zeroed out
a(:) = 3
a[:] = 3
set all
values to the same scalar value
y=x
y = x.copy()
numpy
assigns by reference
y=x(2,:)
y = x[1,:].copy()
numpy
slices are by reference
y=x(:)
y = x.flatten()
turn
array into vector (note that this forces a copy)
1:10
arange(1.,11.)orr_[1.:11.]orr_[1:10:10j]
create an
increasing vector (see noteRANGES)
0:9
arange(10.)orr_[:10.]orr_[:9:10j]
create an
increasing vector (see noteRANGES)
[1:10]'
arange(1.,11.)[:, newaxis]
create a
column vector
zeros(3,4)
zeros((3,4))
3x4
two-dimensional array full of 64-bit floating point
zeros
zeros(3,4,5)
zeros((3,4,5))
3x4x5
three-dimensional array full of 64-bit floating point
zeros
ones(3,4)
ones((3,4))
3x4
two-dimensional array full of 64-bit floating point ones
eye(3)
eye(3)
3x3
identity matrix
diag(a)
diag(a)
vector of
diagonal elements ofa
diag(a,0)
diag(a,0)
square
diagonal matrix whose nonzero values are the elements
ofa
rand(3,4)
random.rand(3,4)
random
3x4 matrix
linspace(1,3,4)
linspace(1,3,4)
4 equally
spaced samples between 1 and 3, inclusive
[x,y]=meshgrid(0:8,0:5)
mgrid[0:9.,0:6.]ormeshgrid(r_[0:9.],r_[0:6.]
two 2D
arrays: one of x values, the other of y values
ogrid[0:9.,0:6.]orix_(r_[0:9.],r_[0:6.]
the best
way to eval functions on a grid
[x,y]=meshgrid([1,2,4],[2,4,5])
meshgrid([1,2,4],[2,4,5])
ix_([1,2,4],[2,4,5])
the best
way to eval functions on a grid
repmat(a, m, n)
tile(a, (m, n))
create m
by n copies ofa
[a b]
concatenate((a,b),1)orhstack((a,b))orcolumn_stack((a,b))orc_[a,b]
concatenate
columns ofaandb
[a; b]
concatenate((a,b))orvstack((a,b))orr_[a,b]
concatenate
rows ofaandb
max(max(a))
a.max()
maximum
element ofa(with
ndims(a)<=2 for matlab)
max(a)
a.max(0)
maximum
element of each column of
matrixa
max(a,[],2)
a.max(1)
maximum
element of each row of matrixa
max(a,b)
maximum(a, b)
comparesaandbelement-wise,
and returns the maximum value from each pair
norm(v)
sqrt(dot(v,v))ornp.linalg.norm(v)
L2 norm
of vectorv
a & b
logical_and(a,b)
element-by-element
AND operator (Numpy ufunc)
a | b
logical_or(a,b)
element-by-element
OR operator (Numpy ufunc)
bitand(a,b)
a & b
bitwise
AND operator (Python native and Numpy ufunc)
bitor(a,b)
a | b
bitwise
OR operator (Python native and Numpy ufunc)
inv(a)
linalg.inv(a)
inverse
of square matrixa
pinv(a)
linalg.pinv(a)
pseudo-inverse
of matrixa
rank(a)
linalg.matrix_rank(a)
matrix
rank of a 2D array / matrixa
a\b
linalg.solve(a,b)ifais
square;linalg.lstsq(a,b)otherwise
solution
of a x = b for x
b/a
Solve a.T
x.T = b.T instead
solution
of x a = b for x
[U,S,V]=svd(a)
U, S, Vh = linalg.svd(a), V = Vh.T
singular
value decomposition ofa
chol(a)
linalg.cholesky(a).T
cholesky
factorization of a matrix (chol(a)in
matlab returns an upper triangular matrix, butlinalg.cholesky(a)returns
a lower triangular matrix)
[V,D]=eig(a)
D,V = linalg.eig(a)
eigenvalues
and eigenvectors ofa
[V,D]=eig(a,b)
V,D = np.linalg.eig(a,b)
eigenvalues
and eigenvectors ofa,b
[V,D]=eigs(a,k)
find
theklargest
eigenvalues and eigenvectors
ofa
[Q,R,P]=qr(a,0)
Q,R = scipy.linalg.qr(a)
QR
decomposition
[L,U,P]=lu(a)
L,U = scipy.linalg.lu(a)orLU,P=scipy.linalg.lu_factor(a)
LU
decomposition (note: P(Matlab) == transpose(P(numpy)) )
conjgrad
scipy.sparse.linalg.cg
Conjugate
gradients solver
fft(a)
fft(a)
Fourier
transform ofa
ifft(a)
ifft(a)
inverse
Fourier transform ofa
sort(a)
sort(a)ora.sort()
sort the
matrix
[b,I] = sortrows(a,i)
I = argsort(a[:,i]), b=a[I,:]
sort the
rows of the matrix
regress(y,X)
linalg.lstsq(X,y)
multilinear
regression
decimate(x, q)
scipy.signal.resample(x, len(x)/q)
downsample
with low-pass filtering
unique(a)
unique(a)
squeeze(a)
a.squeeze()