關(guān)于Python下的Matlab函數(shù)對(duì)應(yīng)關(guān)系(Numpy)
Matlab函數(shù)對(duì)應(yīng)關(guān)系(Numpy)
首先給出官網(wǎng)鏈接,其中詳細(xì)說明了在Python下如何用Numpy實(shí)現(xiàn)Matlab下相同的函數(shù)功能。
博主在用Python撰寫代碼的時(shí)候,想用Python實(shí)現(xiàn)在Matlab下某個(gè)函數(shù)的功能(比如Repmat函數(shù)),但是當(dāng)使用語(yǔ)句
from numpy.matlib import repmat A = repmat(B, 1, 2)
調(diào)用工具包時(shí),雖然可以正常實(shí)現(xiàn)功能,但是PyCharm下報(bào)出警告:
Importing from numpy.matlib is deprecated since 1.19.0. The matrix subclass is not the recommended way to represent matrices or deal with linear algebra (see https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html). Please adjust your code to use regular ndarray.
隨后,通過查閱資料,發(fā)現(xiàn)是因?yàn)閺?.19.0版本后,numpy就不再推薦使用numpy.matlib來實(shí)現(xiàn)對(duì)應(yīng)功能了。
因此,大家可以對(duì)照官網(wǎng)上的說明來實(shí)現(xiàn)替換。
這里截取一小部分:
其他的可以從官網(wǎng)上面找到。
Numpy與Matlab互轉(zhuǎn)操作
在日常使用中,matlab作為我們機(jī)器學(xué)習(xí)以及深度學(xué)習(xí)的模型訓(xùn)練使用的工具,而線上使用python實(shí)現(xiàn)模型落地。因?yàn)椴豢杀苊獬S龅絤atlab與numpy之間有些操作需要相互轉(zhuǎn)換。
1、常用操作(參考numpy官方說明)
MATLAB | numpy | 說明 |
helpfunc | info(func) or help(func) orfunc? (in Ipython) | 獲得函數(shù)的幫助 |
whichfunc | see note HELP | 查找函數(shù)的定義 |
typefunc | source(func) or func?? (inIpython) | 查看函數(shù)源碼 |
a && b | a and b | 邏輯運(yùn)算與操作 |
a || b | a or b | 邏輯運(yùn)算或操作 |
1*i, 1*j,1i, 1j | 1j | 復(fù)數(shù) |
eps | np.spacing(1) | 1與最小浮點(diǎn)數(shù)的距離 |
ode45 | scipy.integrate.solve_ivp(f) | 求解同階微分方程-Kutta 4,5 |
ode15s | scipy.integrate.solve_ivp(f, method='BDF') | 求解變階微分方程 |
2、線性變換(參考numpy官方說明)
MATLAB | NumPy |
ndims(a) | ndim(a) or a.ndim |
numel(a) | size(a) or a.size |
size(a) | shape(a) or a.shape |
size(a,n) | a.shape[n-1] |
[ 1 2 3; 4 5 6 ] | array([[1.,2.,3.], [4.,5.,6.]]) |
[ a b; c d ] | vstack([hstack([a,b]), hstack([c,d])]) or bmat('a b; c d') |
a(end) | a[-1] |
a(2,5) | a[1,4] |
a(2,:) | a[1] or a[1,:] |
a(1:5,:) | a[0:5] or a[:5] or a[0:5,:] |
a(end-4:end,:) | a[-5:] |
a(1:3,5:9) | a[0:3][:,4:9] |
a([2,4,5],[1,3]) | a[ix_([1,3,4],[0,2])] |
a(3:2:21,:) | a[ 2:21:2,:] |
a(1:2:end,:) | a[ ::2,:] |
a(end:-1:1,:) or flipud(a) | a[ ::-1,:] |
a([1:end 1],:) | a[r_[:len(a),0]] |
a.' | a.transpose() or a.T |
a' | a.conj().transpose() or a.conj().T |
a * b | a.dot(b) |
a .* b | a * b |
a./b | a/b |
a.^3 | a**3 |
(a>0.5) | (a>0.5) |
find(a>0.5) | nonzero(a>0.5) |
a(:,find(v>0.5)) | a[:,nonzero(v>0.5)[0]] |
a(:,find(v>0.5)) | a[:,v.T>0.5] |
a(a<0.5)=0 | a[a<0.5]=0 |
a .* (a>0.5) | a * (a>0.5) |
a(:) = 3 | a[:] = 3 |
y=x | y = x.copy() |
y=x(2,:) | y = x[1,:].copy() |
y=x(:) | y = x.flatten() |
1:10 | arange(1.,11.) or r_[1.:11.] or r_[1:10:10j] |
0:9 | arange(10.) or r_[:10.] or r_[:9:10j] |
[1:10]' | arange(1.,11.)[:, newaxis] |
zeros(3,4) | zeros((3,4)) |
zeros(3,4,5) | zeros((3,4,5)) |
ones(3,4) | ones((3,4)) |
eye(3) | eye(3) |
diag(a) | diag(a) |
diag(a,0) | diag(a,0) |
rand(3,4) | random.rand(3,4) |
linspace(1,3,4) | linspace(1,3,4) |
[x,y]=meshgrid(0:8,0:5) | mgrid[0:9.,0:6.] or meshgrid(r_[0:9.],r_[0:6.] |
ogrid[0:9.,0:6.] or ix_(r_[0:9.],r_[0:6.] | |
[x,y]=meshgrid([1,2,4],[2,4,5]) | meshgrid([1,2,4],[2,4,5]) |
ix_([1,2,4],[2,4,5]) | |
repmat(a, m, n) | tile(a, (m, n)) |
[a b] | concatenate((a,b),1) or hstack((a,b)) or column_stack((a,b)) |
[a; b] | concatenate((a,b)) or vstack((a,b)) or r_[a,b] |
max(max(a)) | a.max() |
max(a) | a.max(0) |
max(a,[],2) | a.max(1) |
max(a,b) | maximum(a, b) |
norm(v) | sqrt(dot(v,v)) or np.linalg.norm(v) |
a & b | logical_and(a,b) |
a | b | logical_or(a,b) |
bitand(a,b) | a & b |
bitor(a,b) | a | b |
inv(a) | linalg.inv(a) |
pinv(a) | linalg.pinv(a) |
rank(a) | linalg.matrix_rank(a) |
a\b | linalg.solve(a,b) if a is square; linalg.lstsq(a,b) otherwise |
b/a | Solve a.T x.T = b.T instead |
[U,S,V]=svd(a) | U, S, Vh = linalg.svd(a), V = Vh.T |
chol(a) | linalg.cholesky(a).T |
[V,D]=eig(a) | D,V = linalg.eig(a) |
[V,D]=eig(a,b) | V,D = np.linalg.eig(a,b) |
[V,D]=eigs(a,k) | |
[Q,R,P]=qr(a,0) | Q,R = scipy.linalg.qr(a) |
[L,U,P]=lu(a) | L,U = scipy.linalg.lu(a) or LU,P=scipy.linalg.lu_factor(a) |
conjgrad | scipy.sparse.linalg.cg |
fft(a) | fft(a) |
ifft(a) | ifft(a) |
sort(a) | sort(a) or a.sort() |
[b,I] = sortrows(a,i) | I = argsort(a[:,i]), b=a[I,:] |
regress(y,X) | linalg.lstsq(X,y) |
decimate(x, q) | scipy.signal.resample(x, len(x)/q) |
unique(a) | unique(a) |
squeeze(a) | a.squeeze() |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中內(nèi)置數(shù)據(jù)類型list,tuple,dict,set的區(qū)別和用法
這篇文章主要給大家介紹了Python中內(nèi)置數(shù)據(jù)類型list,tuple,dict,set的區(qū)別和用法,都是非?;A(chǔ)的知識(shí),十分的細(xì)致全面,有需要的小伙伴可以參考下。2015-12-12Python根據(jù)站點(diǎn)列表繪制站坐標(biāo)全球分布圖的示例
這篇文章主要介紹了Python根據(jù)站點(diǎn)列表繪制站坐標(biāo)全球分布圖,輸入站點(diǎn)列表文件、snx全球站點(diǎn)坐標(biāo)文件,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12pytorch無(wú)坑安裝CPU版小白教程(配gpu版鏈接、conda命令教程)
pip安裝無(wú)論是cpu還是gpu的pytorch安裝,其實(shí)官方給了很好的安裝流程,本文主要介紹了pytorch無(wú)坑安裝CPU版小白教程,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03python簡(jiǎn)單驗(yàn)證碼識(shí)別的實(shí)現(xiàn)過程
很多網(wǎng)站登錄都需要輸入驗(yàn)證碼,如果要實(shí)現(xiàn)自動(dòng)登錄就不可避免的要識(shí)別驗(yàn)證碼,這篇文章主要給大家介紹了關(guān)于python簡(jiǎn)單驗(yàn)證碼識(shí)別的實(shí)現(xiàn)過程,需要的朋友可以參考下2021-06-06PyCharm+Pipenv虛擬環(huán)境開發(fā)和依賴管理的教程詳解
這篇文章主要介紹了PyCharm+Pipenv虛擬環(huán)境作開發(fā)和依賴管理的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04