Python 會不會替代 MATLAB?

MATLAB 雖然很強大,但是太單一了。不能 web,不能做腳本……各種缺點

最主要是收費,作為大企業公司是不在乎,作為個人開發者購買就比較無力了。


如果說的是matlab整個產品,我覺得短時間內是不可能的。

如果是符號計算,matlab的確不行。

即使是matlab比較擅長的有大量矩陣和向量的數值計算,和一些優良的庫相比,也不一定效率最高。

但是,matlab發展到今天,這些都不是matlab最重要的部分了。

matlab一直在推廣的是model based design,來看個海報:

沒錯,mathworks在說,他家的軟體結合model based design這種設計方法,輔助了一台火星探測器的設計。看到上面的海報裡面說的380,000 simulations,你可能覺得這個設計方法中,matlab的產品的作用僅僅是模擬,但是這不一定,看下一個例子:

這個是個國內的例子,電動汽車的電源管理,注意上面的話:100% of code generated , 這裡說的code是C語言代碼,這些C代碼的target device是嵌入式設備。

這就意味著那不僅僅是模擬了,模型是能夠直接生成代碼的。

所以,python要取代它。

除了數值計算。

需要開源社區設計出一個比較成熟的模擬軟體。

而模擬軟體還要能夠支持code generation。

這本質上是一堆不同的編譯器(嵌入式設備眾多,還需要廠家的配合才行)。

PS:

1.

當初Cleve Moler設計matlab是幫學生減輕負擔,避免他們去學Fortran(LINPACK)。但是,作為一個工程師的Jack的加入,肯定會把這個東西往工程上靠。那麼數值計算是foundation,但是在這個foundation上如何發揮才是使得matlab不一樣了的地方。

而這個Foundation的部分,可以在後續的release中慢慢地優化,使用更好的開源實現,或者是直接購買一些商業實現庫。

但是,如果發揮出來的整個體系成了不可替代的了,那這就不僅僅是一個數學分析工具了,而是一個從開始的需求分析,模型驗證,以及到實現,整個設計流程都包含的工程平台了。

2.

樓主說的不能web,如果要把matlab作為伺服器端語言,我確實還沒有看到類似的應用。但是,如果只是一些網路應用,比如web crawler,網上其實挺多的。

matlab裡面有幾個簡單的網路介面函數,比如urlread可以讀取網頁,還有xmlread。

這個函數是用java的庫寫的,因為matlab裡面是集成了JVM的,其實在你的matlab 代碼裡面可以直接調用java的libraries。

只是,這些屬於undocumented範疇,這裡有個網站就專門挖掘這些:

Undocumented Matlab

目前的web server一般都是動態生成html頁面了。我確實還沒有見到這方面的應用。

但是,如果是生稱靜態的html頁面,那麼matlab其實一直都可以。

Cleve Moler的博客其實使用matlab寫的:

MATLAB Central

上面鏈接里是Cleve Moler的一篇博客,這片博客裡面有圖片,有代碼,還有文字。

Cleve在寫這樣一篇博客的時候,其實只是寫了一個m文件,裡面有注釋,在cell mode裡面註明了各個地方的title。然後在editor裡面publish。

在發布的過程中,matlab會把運行結果中的圖也自動加入最後生成的html文件里(圖片放在單獨文件夾)。

在m文件中還支持Latex,這些會在生稱的html被自動轉換成文字或者公式的圖片。

在那篇博客的文末的右邊,有個 「get the matlab code」鏈接,你可以把它的m文件下載下來自己看下,然後自己發布一下,看看生稱的html文件是怎樣的。

3.

樓主說的腳本,其實matlab就是一種腳本語言。

這也是為什麼它的調試會比較方便。

你不需要一個專門的入口,你可以從m文件的任何一個位置開始運行你的程序。

matlab的編輯器有一個cell mode,使用它,你可以把m中的任何一個你想要單獨運行的部分放在一個cell裡面,只執行這個cell。

另外,說到windows的操作。

在matlab裡面可以直接執行dos命令。

所以在涉及到了windows的比較複雜一點的操作,可以用批處理寫好batch,然後在matlab裡面調用。

當然,你可以用matlab先生稱一個batch,然後運行。

4.

最後,雖然matlab是一個商業軟體。

但是在matlab這個商業平台上是有「開源社區」的。

matlab的File Exchange是一個很活躍的社區。


*本文應題為「生物狗如何優雅地使用 MATLAB」*

MATLAB 除了生孩子已經什麼都能幹了題主居然還嫌 MATLAB 不夠用?

價格問題,有各種不同版本完美實現價格歧視(學生版不到 100 刀其實大部分本科生都會買)。而且盜版橫行這種事情,好像也就是國內比較猖獗……

以及,MATLAB 是可以實現大部分腳本功能的。我現在文件批處理之類基本都用 MATLAB 了,跨平台兼容。

當然,個人開發者如果沒有獨特需求就去用 python 或者 R 之類的吧。反正 MATLAB 也不是沖著這個市場去的。

先說說 MATLAB 特有的優勢吧。

其一,MATLAB 的工具包非常全,基本上各種你能想到的事情都能做。

我就不貼自己 MATLAB 的工具包了(組裡訂閱了 MATLAB 所以基本把所有的包配齊了),數了一下,總共 47 個,我只用了 7 個,而且每個裡面可能也就用了其中百分之一的功能。。。另外 simulink 是機械工程等專業建模和模擬必備軟體,但我從來沒用過,也就不敢妄言了。

其二,雖說是商業軟體,人家也有開源項目的!

MATLAB 有一個官方支持的源文件共享平台 MATLAB Central, 集成了很多好用的小模塊小函數,個人覺得比其它開源項目的代碼質量要高,主要體現在平台依賴性小,有 bug 回復及時等方面,基本找到的都能用,不用花三五天重新修改。

其三,商業軟體好啊。客服耐心,bug 少,新版本穩定,document 詳盡清楚錯誤少……反正是我老闆掏錢不是我。哈哈。

下面列舉一些我科研中用到 MATLAB 的例子。

# 流式細胞儀數據處理

Mac 用戶們很多都頭疼過 Mac 下沒有好用的流式數據處理軟體吧?有錢買 FlowJo 的實驗室畢竟是少數,然後 Windows 下還有一些免費軟體可用,Mac 簡直找得要哭。

然後我就整合了幾個 MATLAB Central 上的幾個模塊寫了一個能處理流式數據的框架:https://bitbucket.org/handuos/fcgui

有一個 GUI 窗口,能設閾值能畫 FlowJo 能畫的各種圖能半批量處理數據,我就知足了……

(剛剛順手搜了一下,其實有個 python 寫的類似軟體:https://pypi.python.org/pypi/FlowCytometryTools 看起來也不錯……還沒測試。)

# 生物信息學相關

生物信息學的包里我常用的有基礎的序列比對,BLAST 介面,GO annotation 介面,microarray 數據讀寫介面等等。這個 python 真心不好用,因為 biopython 的包比較亂。R 這方面也挺好,我不太常用罷了。

# 顯微鏡硬體介面

去年為了提高顯微鏡拍攝的效率,用 MATLAB 寫了個操縱顯微鏡的平台。這個目前老闆有發表的打算,就不多說了。基本上就是用了 MATLAB 自動控制載物台,調整聚焦。還想加入一個功能,就是採集圖像的同時進行數據處理,因為已經有現成的數據處理腳本,所以應該可以比較方便地集成。


雖然python裡面有一個完全模仿matlab做的工具叫做spyder,然后里面有個包也是包含了各種類似matlab的函數,模仿到了甚至一些簡單的功能matlab代碼複製過去,根據python語法改一改,馬上就可以用了;

但是,畢竟在一些別的方面matlab是這個領域最專業的,它裡面內置了很多函數在python裡面是不帶有的,就算python有,但是也沒有matlab快;再說了,matlab裡面的simulink,神經網路工具箱,小波分析工具箱,或者現在2013版裡面新引入的在射頻電磁場方面模擬用的工具箱,這些別說python了,別的軟體也不一定有matlab好使。。。

回頭再看看題主的問題,你說matlab功能太單一了,那是你用matlab的功能用的還不多(其實也沒有人可以用上matlab裡面的所有功能。。。)

然後如果說不能做網站不能做腳本,那我只能說,題主,請注意,合適的問題請用合適的工具來完成,因為我常用C++,Python,Matlab,Mathematica等東西,但是對於某個我想做的功能,我都會選擇最適合做這件事情的工具,而不是去想著怎麼一招吃遍天;

哦,另外,說到腳本,其實matlab也差不多可以做類似的事情的,我就寫過matlab改系統的各種東西,重命名MP3的各種東西,還有搬運漫畫打包之類的小代碼。。


Python 不會取代 Matlab,因為它們本質上是不同的東西。在我看來,Matlab 本質上是一款大型工具軟體,雖然它內置了一種編程語言;Python是一門程序設計語言,雖然它有很多工具包可以使用。另外,Matlab 內置的編程語言就是 Matlab 環境下的腳本語言。


如果題主問的僅僅是MATLAB:我們不把python當作競爭對手。

如果題主問的還包括基於MATLAB的產品,比如Simulink和各種工具箱:這有python什麼事么?

------------------------------------------------------------------------------------------

前幾天開了個會,主講人提到了Python,大意是現在雖然不是大的威脅,但是有趨勢將來變成威脅,因為「開源+免費」的威力太大了。


我以前也經常問這類問題,甚至心裡想matlab這種反人類的編程語言什麼時候能快點消失(被老版本毒害不淺,界面太丑,確實不喜歡)。舉兩個我自己的例子:

1.最初剛接觸編程語言,第一個語言是VB,我以為所有編程語言都是可視化的,然後接觸了c,於是我想,為什麼c不能可視化編程呢?

所以,我之所以有這種想法,是因為我根本只是聽說過這門語言,而沒有動手寫過一個程序,所以會很自然地去排斥,因為他和我的習慣不同。

2.我在接觸matlab之前,首先接觸並上手的只mma,用過的朋友都知道,mma的幫助文檔和操作界面人性化,用起來舒服。而且他特有的筆記本模式很像一款超級計算器,用起來很酷(≧▽≦)。mma的模式匹配,正則表達,符號數學很強,於是我很排斥使用matlab,因為又丑代碼又不好寫(mma是函數式編程,比較像一個大計算器,matlab更像是一個命令行版的c),但是matlab讓我無法擺脫,因為他強大的工具箱,比如ee的同學一定會接觸的simiulink。相比較mma就沒有這個庫,你沒有辦法畫一個電路分析。

我也在想為什麼不做一個呢?後來發現這就是軟體開發的不同目標導致的,mma更像是追求終極計算,他的符號數學用於物理學化學天文學的公式推導會相當省力,而matlab的名稱是「矩陣實驗室」,例如電路分析這種大量求借方程的工科問題matlab處理器來得心應手。Python雖然也涉及科學計算,但是Python的優勢在於大量免費,開源的第三方庫,就像搭積木一樣可以快速做某件事情,很適合做腳本,甚至大工程也很省力氣。

去比較這些軟體,編程語言,往往會習慣性的把他們對立起來,或者去做一些比較,得出一個排名啦之類。但是真正使用的人,或者說高效使用他們的人都是一起協作使用的。結合我個人的經歷,我覺得題主應該去用一下,然後自己在靜一靜,想一想。


謝邀。

市場不同吧,沒有誰取代誰。誠然Python的NumPy和MATLAB有重疊,但建基於這這東西的包,則各有特色。如Python有自然語言處理的包,而MATLAB有工程上的一些應用(如Simulink)。

現代市場中,如有被人取替的東西,做得不夠好的被人取替是妙殺之事,用家是精明的。現在大家都沒死,可見各有千秋。


不會。matlab面向的群體以及功能定位與python完全不同。python可以做科學計算沒錯,但是做不到像matlab那樣有足夠權威的已集成的工具箱。雖然各種功能的模塊都不缺,但是pip里模塊質量確實參差不齊。


應該不會,MATLAB也好,Python也好,R也好,都僅僅是個工具,各有利弊。

能快速建模,完成相關目的是關鍵。單純的語言之戰也沒啥意義,什麼好用,哪個建模周期短,就用哪個就好。


至少是在機器學習方面 以後python絕對是主流。


說一個吧,跟MATLAB相比,R跟Python的關係還更加曖昧不清。而且R一直有一種被遊離的感覺。對於我們這些不大會編程的人,R很好用,但是很有局限,會編程的,覺得R效率低,使用條件苛刻,等等。


無論python多麼強大,都無法替代SIMULINK的存在


知乎經典語錄,「你以為你以為是你以為的」?

Matlab並不是很多人以為的那樣。如果說Windows或者Word里有95%的功能你都沒有用到,那Matlab里有99%的功能你可能都沒聽說過。在Matlab里輸入ver可以顯示當前license下的所有matlab toolbox,我來貼一下我的:

-------------------------------------------------------------------------------------------------------

MATLAB Version: 8.1.0.604 (R2013a)

MATLAB License Number: 724504

Operating System: Microsoft Windows 7 Version 6.1 (Build 7601: Service Pack 1)

Java Version: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode

-------------------------------------------------------------------------------------------------------

MATLAB Version 8.1 (R2013a)

Simulink Version 8.1 (R2013a)

Aerospace Blockset Version 3.11 (R2013a)

Aerospace Toolbox Version 2.11 (R2013a)

Bioinformatics Toolbox Version 4.3 (R2013a)

Communications System Toolbox Version 5.4 (R2013a)

Computer Vision System Toolbox Version 5.2 (R2013a)

Control System Toolbox Version 9.5 (R2013a)

Curve Fitting Toolbox Version 3.3.1 (R2013a)

DO Qualification Kit Version 2.1 (R2013a)

DSP System Toolbox Version 8.4 (R2013a)

Data Acquisition Toolbox Version 3.3 (R2013a)

Database Toolbox Version 4.1 (R2013a)

Datafeed Toolbox Version 4.5 (R2013a)

Econometrics Toolbox Version 2.3 (R2013a)

Embedded Coder Version 6.4 (R2013a)

Filter Design HDL Coder Version 2.9.3 (R2013a)

Financial Instruments Toolbox Version 1.1 (R2013a)

Financial Toolbox Version 5.1 (R2013a)

Fixed-Point Designer Version 4.0 (R2013a)

Fuzzy Logic Toolbox Version 2.2.17 (R2013a)

Global Optimization Toolbox Version 3.2.3 (R2013a)

HDL Coder Version 3.2 (R2013a)

HDL Verifier Version 4.2 (R2013a)

IEC Certification Kit Version 3.1 (R2013a)

Image Acquisition Toolbox Version 4.5 (R2013a)

Image Processing Toolbox Version 8.2 (R2013a)

Instrument Control Toolbox Version 3.3 (R2013a)

MATLAB Builder EX Version 2.3.1 (R2013a)

MATLAB Builder JA Version 2.2.6 (R2013a)

MATLAB Builder NE Version 4.1.3 (R2013a)

MATLAB Coder Version 2.4 (R2013a)

MATLAB Compiler Version 4.18.1 (R2013a)

MATLAB Distributed Computing Server Version 6.2 (R2013a)

MATLAB Report Generator Version 3.14 (R2013a)

Mapping Toolbox Version 3.7 (R2013a)

Model Predictive Control Toolbox Version 4.1.2 (R2013a)

Model-Based Calibration Toolbox Version 4.6 (R2013a)

Neural Network Toolbox Version 8.0.1 (R2013a)

OPC Toolbox Version 3.2 (R2013a)

Optimization Toolbox Version 6.3 (R2013a)

Parallel Computing Toolbox Version 6.2 (R2013a)

Partial Differential Equation Toolbox Version 1.2 (R2013a)

Phased Array System Toolbox Version 2.0 (R2013a)

RF Toolbox Version 2.12 (R2013a)

Real-Time Windows Target Version 4.2 (R2013a)

Robust Control Toolbox Version 4.3 (R2013a)

Signal Processing Toolbox Version 6.19 (R2013a)

SimBiology Version 4.3 (R2013a)

SimDriveline Version 2.4 (R2013a)

SimElectronics Version 2.3 (R2013a)

SimEvents Version 4.3 (R2013a)

SimHydraulics Version 1.12 (R2013a)

SimMechanics Version 4.2 (R2013a)

SimPowerSystems Version 5.8 (R2013a)

SimRF Version 4.0 (R2013a)

Simscape Version 3.9 (R2013a)

Simulink 3D Animation Version 6.3 (R2013a)

Simulink Code Inspector Version 1.3 (R2013a)

Simulink Coder Version 8.4 (R2013a)

Simulink Control Design Version 3.7 (R2013a)

Simulink Design Optimization Version 2.3 (R2013a)

Simulink Design Verifier Version 2.4 (R2013a)

Simulink PLC Coder Version 1.5 (R2013a)

Simulink Report Generator Version 3.14 (R2013a)

Simulink Verification and Validation Version 3.5 (R2013a)

Spreadsheet Link EX Version 3.1.7 (R2013a)

Stateflow Version 8.1 (R2013a)

Statistics Toolbox Version 8.2 (R2013a)

Symbolic Math Toolbox Version 5.10 (R2013a)

System Identification Toolbox Version 8.2 (R2013a)

SystemTest Version 2.6.5 (R2013a)

Trading Toolbox Version 1.0 (R2013a)

Vehicle Network Toolbox Version 2.0 (R2013a)

Wavelet Toolbox Version 4.11 (R2013a)

xPC Target Version 5.4 (R2013a)

xPC Target Embedded Option Version 5.4 (R2013a)

--

大部分我也都沒用過,我就貼一個simulink的截圖:

每一個Library下面都有十來個組件,你說python能取代Matlab?搞siao呢?


這個當然不會,首先Matlab不僅僅只是計算,就算是計算的部分python可以通過各種庫來取代。但是Matlab還有simulink,對於simulink的模擬功能python肯定是沒有辦法取代的,而且simulink還可以直接生成c代碼,很大程度的支持嵌入式設備,這些都是python不能做到的。


我的觀點是部分替代。

simulink以及部分很專業的工具箱無法替代,其他完全可以替代。

比如數據科學,安裝上anaconda,易用性和MATLAB差不多,但功能更多,開源的力量是很強大的。


以我曾經試圖用python+各種包來代替matlab做一門機器學習方面的課為例子來說明一下即使用不到matlab里各種高級的模擬功能等等,python也不可能代替matlab:

這個課的作業大致就是一些PCA和LLE這樣的線性非線性的降維技術,班上大多數理智的人都用了matlab,而我裝逼情緒爆發用的是python,numpy+scipy+sklearn(前兩個大概是最容易讓大家以為matlab要被python代替的包了)。事實證明大家都異常輕鬆的作業把我折騰得夠嗆。例如在做一個矩陣特徵分解的時候一個實對稱矩陣愣是能給我分解出複數特徵值來,最後查證是包里的bug……我覺得很難想像matlab這種商業軟體會在這種常用函數里出bug。

當然即使拋去這些包里存在的各種bug,單單是寫起來比matlab麻煩就夠了,畢竟像高校里用matlab的人大多數都是用這貨來發paper的研究生們。單單驗證想法就別談別的了,當然是寫起來越簡單越好。翻到paper的dl前兩天寫的matlab代碼現在看看都覺得丑,那時候連a1a2a3這種醜陋的變數名都寫得出來怎麼還會有閑心關心python的縮進。

所以說,除非matlab大力打擊盜版讓盜版絕跡(這事兒貌似也不好弄),否則python是肯定搞不過它的。


我還真用MATLAB做了伺服器


好多嵌入式程序現在都可以用MATLAB寫了,而且Python沒有SIMULINK這種東西,我覺得SIMULINK是真正讓MATLAB如虎添翼的東西。希望以後有人能用Python開發出SIMULINK類似物。

有人說到價格問題,在國外,尤其美國這邊,學校都有免費的或者打折的學生版提供下載的……


Matlab在細分領域應用上會被群狼A死. python在機器學習應用領域越發強勢了. R語言從一開始就把Matlab擋在了統計應用的門外了. Maple還有基於網頁的Wolfram專業版也在蠶食各個細分應用領域. 但大家發現沒有,當一個項目涵蓋很多細分領域時你只能用Matlab了... 當然你要是很有耐心也可以分解項目為多個子項目,然後為每一個子項目選一個最優的非Matlab工具...


替代不太可能,mathworks那堆人也不是吃乾飯的。不說其他simulink這個python生態裡面就沒得比較好的替代品... ...matlab的核心的話python倒是基本覺得可以五五開了,但是matlab那麼多toolbox... ...大部分python中並沒有好的替代。


推薦閱讀:

Python 中 「is」 和 「==」 的問題?
anaconda中如何安裝keras?
wxPython什麼時候可以支持Python3.5?
python中字元串 s[ : -1]是什麼意思?
為什麼用pycharm在同目錄下import,pycharm會報錯,但是實際可以運行?

TAG:Python | 編程 | MATLAB |