sábado, 19 de octubre de 2019

Python Equivalentes de matlab en numpy



https://numpy.org/devdocs/user/numpy-for-matlab-users.html


Table of Rough MATLAB-NumPy Equivalents

The table below gives rough equivalents for some common MATLAB® expressions. These are not exact equivalents, but rather should be taken as hints to get you going in the right direction. For more detail read the built-in documentation on the NumPy functions.
In the table below, it is assumed that you have executed the following commands in Python:
from numpy import *
import scipy.linalg
Also assume below that if the Notes talk about “matrix” that the arguments are two-dimensional entities.

General Purpose Equivalents

MATLABnumpyNotes
help funcinfo(func) or help(func) or func? (in Ipython)get help on the function func
which funcsee note HELPfind out where func is defined
type funcsource(func) or func?? (in Ipython)print source for func (if not a native function)
a && ba and bshort-circuiting logical AND operator (Python native operator); scalar arguments only
a || ba or bshort-circuiting logical OR operator (Python native operator); scalar arguments only
1*i1*j1i1j1jcomplex numbers
epsnp.spacing(1)Distance between 1 and the nearest floating point number.
ode45scipy.integrate.solve_ivp(f)integrate an ODE with Runge-Kutta 4,5
ode15sscipy.integrate.solve_ivp(f, method='BDF')integrate an ODE with BDF method

Linear Algebra Equivalents

MATLABNumPyNotes
ndims(a)ndim(a) or a.ndimget the number of dimensions of an array
numel(a)size(a) or a.sizeget the number of elements of an array
size(a)shape(a) or a.shapeget the “size” of the matrix
size(a,n)a.shape[n-1]get the number of elements of the n-th dimension of array a. (Note that MATLAB® uses 1 based indexing while Python uses 0 based indexing, See note INDEXING)
[ 1 2 3; 4 5 6 ]array([[1.,2.,3.], [4.,5.,6.]])2x3 matrix literal
[ a b; c d ]block([[a,b], [c,d]])construct a matrix from blocks abc, and d
a(end)a[-1]access last element in the 1xn matrix a
a(2,5)a[1,4]access element in second row, fifth column
a(2,:)a[1] or a[1,:]entire second row of a
a(1:5,:)a[0:5] or a[:5] or a[0:5,:]the first five rows of a
a(end-4:end,:)a[-5:]the last five rows of a
a(1:3,5:9)a[0:3][:,4:9]rows one to three and columns five to nine of a. 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 of a, starting with the third and going to the twenty-first
a(1:2:end,:)a[ ::2,:]every other row of a, starting with the first
a(end:-1:1,:) or flipud(a)a[ ::-1,:]a with rows in reverse order
a([1:end 1],:)a[r_[:len(a),0]]a with copy of the first row appended to the end
a.'a.transpose() or a.Ttranspose of a
a'a.conj().transpose() or a.conj().Tconjugate transpose of a
a * ba @ bmatrix multiply
a .* ba * belement-wise multiply
a./ba/belement-wise divide
a.^3a**3element-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 values False and True.
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 of a where vector v > 0.5
a(:,find(v>0.5))a[:,v.T>0.5]extract the columms of a where column vector v > 0.5
a(a<0.5)=0a[a<0.5]=0a with elements less than 0.5 zeroed out
a .* (a>0.5)a * (a>0.5)a with elements less than 0.5 zeroed out
a(:) = 3a[:] = 3set all values to the same scalar value
y=xy = 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:10arange(1.,11.) or r_[1.:11.] or r_[1:10:10j]create an increasing vector (see note RANGES)
0:9arange(10.) or r_[:10.] or r_[:9:10j]create an increasing vector (see note RANGES)
[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 of a
diag(a,0)diag(a,0)square diagonal matrix whose nonzero values are the elements of a
rand(3,4)random.rand(3,4) or random.random_sample((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.] or meshgrid(r_[0:9.],r_[0:6.]two 2D arrays: one of x values, the other of y values
ogrid[0:9.,0:6.] or ix_(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 of a
[a b]concatenate((a,b),1) or hstack((a,b)) or column_stack((a,b)) or c_[a,b]concatenate columns of a and b
[a; b]concatenate((a,b)) or vstack((a,b)) or r_[a,b]concatenate rows of a and b
max(max(a))a.max()maximum element of a (with ndims(a)<=2 for matlab)
max(a)a.max(0)maximum element of each column of matrix a
max(a,[],2)a.max(1)maximum element of each row of matrix a
max(a,b)maximum(a, b)compares a and b element-wise, and returns the maximum value from each pair
norm(v)sqrt(v @ v) or np.linalg.norm(v)L2 norm of vector v
a & blogical_and(a,b)element-by-element AND operator (NumPy ufunc) See note LOGICOPS
a | blogical_or(a,b)element-by-element OR operator (NumPy ufunc) See note LOGICOPS
bitand(a,b)a & bbitwise AND operator (Python native and NumPy ufunc)
bitor(a,b)a | bbitwise OR operator (Python native and NumPy ufunc)
inv(a)linalg.inv(a)inverse of square matrix a
pinv(a)linalg.pinv(a)pseudo-inverse of matrix a
rank(a)linalg.matrix_rank(a)matrix rank of a 2D array / matrix a
a\blinalg.solve(a,b) if a is square; linalg.lstsq(a,b) otherwisesolution of a x = b for x
b/aSolve a.T x.T = b.T insteadsolution of x a = b for x
[U,S,V]=svd(a)U, S, Vh = linalg.svd(a), V = Vh.Tsingular value decomposition of a
chol(a)linalg.cholesky(a).Tcholesky factorization of a matrix (chol(a) in matlab returns an upper triangular matrix, but linalg.cholesky(a) returns a lower triangular matrix)
[V,D]=eig(a)D,V = linalg.eig(a)eigenvalues and eigenvectors of a
[V,D]=eig(a,b)D,V = scipy.linalg.eig(a,b)eigenvalues and eigenvectors of ab
[V,D]=eigs(a,k)find the k largest eigenvalues and eigenvectors of a
[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) or LU,P=scipy.linalg.lu_factor(a)LU decomposition (note: P(Matlab) == transpose(P(numpy)) )
conjgradscipy.sparse.linalg.cgConjugate gradients solver
fft(a)fft(a)Fourier transform of a
ifft(a)ifft(a)inverse Fourier transform of a
sort(a)sort(a) or a.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()

Notes

No hay comentarios:

Publicar un comentario