Python numpy和matlab的幾點(diǎn)差異介紹
numpy和matlab的幾點(diǎn)差異
Python numpy和matlab都是便捷靈活的科學(xué)計(jì)算語(yǔ)言,兩者具有很多相似之處,但也有一些混淆的地方,這里假定你熟悉matlab,但不了解numpy,記錄幾個(gè)numpy實(shí)例:
1、Numpy數(shù)組索引指定開(kāi)始和結(jié)束時(shí)
不包括結(jié)束,也即下面的b和c是一樣的。
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) b = a[:2, 1:2] c = a[:2, 1]
2、Numpy.ndarray切片的修改會(huì)引起原矩陣的修改
這與matlab不同。
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) b = a[:2, 1:3] # [[2 3] # ?[6 7]] print(a[0, 1]) ? # Prints "2" b[0, 0] = 77 ? ? # b[0, 0] is the same piece of data as a[0, 1] print(a[0, 1]) ? # Prints "77"
3、numpy使用切片索引(例如1:2)不會(huì)產(chǎn)生降維
而使用整數(shù)索引(例如1)會(huì)產(chǎn)生降維。
import numpy as np a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) row_r1 = a[1, :] ? ?# Rank 1 view of the second row of a row_r2 = a[1:2, :] ?# Rank 2 view of the second row of a print(row_r1, row_r1.shape) ?# Prints "[5 6 7 8] (4,)" print(row_r2, row_r2.shape) ?# Prints "[[5 6 7 8]] (1, 4)" col_r1 = a[:, 1] col_r2 = a[:, 1:2] print(col_r1, col_r1.shape) ?# Prints "[ 2 ?6 10] (3,)" print(col_r2, col_r2.shape) ?# Prints "[[ 2] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# ? ? ? ? ?[ 6] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# ? ? ? ? ?[10]] (3, 1)"
4、不同于matlab
numpy的轉(zhuǎn)置對(duì)于1維數(shù)組的操作不發(fā)生變化。
v = np.array([1,2,3]) print(v) ? ?# Prints "[1 2 3]" print(v.T) ?# Prints "[1 2 3]"
5、不同matlab對(duì)于矩陣預(yù)算要求大小一致
Numpy broadcasting直接支持操作(加減乘除等),要求前一個(gè)矩陣的最后一維度大小和待操作矩陣的大小相同。
x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]]) v = np.array([1, 0, 1]) y = x + v ?# Add v to each row of x using broadcasting print(y) ?# Prints "[[ 2 ?2 ?4] ? ? ? ? ? # ? ? ? ? ?[ 5 ?5 ?7] ? ? ? ? ? # ? ? ? ? ?[ 8 ?8 10]
python與matlab的優(yōu)缺點(diǎn)
如果要問(wèn)我選哪個(gè),我會(huì)建議兩個(gè)都選。很多人喜歡拿python和matlab對(duì)比,然后得出哪個(gè)更好的結(jié)論。其實(shí)吧,夠用就好。
如果是學(xué)生,或者研究人員,比如研究信號(hào)處理,那么用matlab比較好,有大量現(xiàn)成工具箱和前人的成果可以借鑒。如果是產(chǎn)品化項(xiàng)目,那么python比較好,可以做web后臺(tái),可以打包成應(yīng)用程序,效率相對(duì)matlab也要高那么一點(diǎn)點(diǎn)。如果是信號(hào)、數(shù)據(jù)方面的工程人員,建議還是兩個(gè)都掌握吧,也不復(fù)雜,都是腳本式的語(yǔ)言,比C++什么的易學(xué)多了。
下面從兩者各自的應(yīng)用做個(gè)對(duì)比。
1、python的優(yōu)勢(shì)
Python相對(duì)于Matlab最大的優(yōu)勢(shì):免費(fèi)。國(guó)內(nèi)可能不是很在乎這個(gè),但在國(guó)外是個(gè)很關(guān)鍵的問(wèn)題。
Python次大的優(yōu)勢(shì):開(kāi)源。你可以大量更改科學(xué)計(jì)算的算法細(xì)節(jié)。
可移植性,Matlab必然不如Python。但你主要做Research,這方面需求應(yīng)當(dāng)不高。
第三方生態(tài),Matlab不如Python。比如3D的繪圖工具包,比如GUI,比如更方便的并行,使用GPU,F(xiàn)unctional等等。長(zhǎng)期來(lái)看,Python的科學(xué)計(jì)算生態(tài)會(huì)比Matlab好。
語(yǔ)言更加優(yōu)美。另外如果有一定的OOP需求,構(gòu)建較大一點(diǎn)的科學(xué)計(jì)算系統(tǒng),直接用Python比用Matlab混合的方案肯定要簡(jiǎn)潔不少。
python作為一種通用編程語(yǔ)言,可以做做Web,搞個(gè)爬蟲(chóng),編個(gè)腳本,寫(xiě)個(gè)小工具用途很廣泛。
2、matlab的優(yōu)勢(shì)
學(xué)術(shù)界大量使用matlab做仿真,做研究的話容易找到代碼參考;
語(yǔ)法相對(duì)python更靈活一些,matlab寫(xiě)程序基本不用套路,所謂老夫擼matlab就一個(gè)字,干;
有simulink。有人說(shuō)simulink沒(méi)什么用,其實(shí)還是挺有用的,比如通信建模,另外simulink可以生產(chǎn)DSP或者FPGA代碼,有的時(shí)候很有用。
3、兩者的區(qū)別
python是一種通用語(yǔ)言,而matlab更像是一個(gè)平臺(tái)。
4、怎樣選擇
如果做研究,可以matlab為主;如果做產(chǎn)品,可以python為主。當(dāng)然也有matlab做成產(chǎn)品的,打包成exe什么的都不是事。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解python OpenCV學(xué)習(xí)筆記之直方圖均衡化
本篇文章主要介紹了詳解python OpenCV學(xué)習(xí)筆記之直方圖均衡化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02python正則表達(dá)式match和search用法實(shí)例
這篇文章主要介紹了python正則表達(dá)式match和search用法,實(shí)例分析了正則表達(dá)式中match和search的功能、定義及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03Python入門之實(shí)例方法、類方法和靜態(tài)方法的區(qū)別講解
這篇文章主要介紹了Python入門之實(shí)例方法、類方法和靜態(tài)方法的區(qū)別講解,實(shí)例方法是在創(chuàng)建了類的實(shí)例之后才能被調(diào)用的方法,類方法是在不需要?jiǎng)?chuàng)建類的實(shí)例的情況下就可以調(diào)用的方法,最后,靜態(tài)方法是與類和類的實(shí)例都沒(méi)有綁定關(guān)系的方法,需要的朋友可以參考下2023-10-10Django與AJAX實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)數(shù)據(jù)顯示的示例代碼
這篇文章主要介紹了Django與AJAX實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)數(shù)據(jù)顯示的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python實(shí)現(xiàn)遍歷大量表格文件并篩選出數(shù)據(jù)缺失率低的文件
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)遍歷大量表格文件并篩選出表格內(nèi)數(shù)據(jù)缺失率低的文件的功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05詳解Pytorch顯存動(dòng)態(tài)分配規(guī)律探索
這篇文章主要介紹了Pytorch顯存動(dòng)態(tài)分配規(guī)律探索,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11python 實(shí)現(xiàn)"神經(jīng)衰弱"翻牌游戲
這篇文章主要介紹了python 實(shí)現(xiàn)"神經(jīng)衰弱"游戲,幫助大家更好的理解和使用python的pygame庫(kù),感興趣的朋友可以了解下2020-11-11