Matlab vs python cho máy tính khoa học

Tôi tin rằng trong nhiều trường hợp Python có thể thay thế Matlab. Trên trang này, tôi sẽ cố gắng giải thích sự khác biệt giữa Matlab và Python, và giải thích tại sao tôi thích Python hơn.  


Bản phân phối Python khoa học

Nhưng trước tiên, một vài liên kết để giúp bạn bắt đầu nhanh chóng. Bạn có thể viết mã Python chỉ trong vài phút

Cách dễ nhất để bắt đầu với tính toán khoa học trong Python là sử dụng một trong các bản phân phối. Bằng cách đó, bạn tự động nhận được hầu hết các gói khoa học quan trọng. Một số bản phân phối cũng đi kèm với IDE

  • Pyzo, bản phân phối miễn phí dựa trên Python 3, đi kèm với Trình chỉnh sửa tương tác cho Python (IEP)
  • python(x,y) và WinPython là hai bản phân phối miễn phí dựa trên Spyder IDE
  • Anaconda, bản phân phối Python của Continuum. Phiên bản (cộng đồng) miễn phí cũng có sẵn
  • EPD, Bản phân phối Python của Enthughts. Một phiên bản miễn phí cũng có sẵn

Python so với Matlab (sự kiện)

Dưới đây là sơ đồ minh họa sự khác biệt chính giữa Python và Matlab. Python, theo định nghĩa, là một ngôn ngữ lập trình. Cách triển khai phổ biến nhất là trong C (còn được gọi là CPython) và là thứ thường được gọi là "Python". Ngoài ngôn ngữ lập trình và trình thông dịch, Python còn bao gồm một thư viện tiêu chuẩn phong phú. Thư viện này nhằm mục đích lập trình nói chung và chứa các mô-đun cho nội dung cụ thể của os, luồng, mạng, cơ sở dữ liệu, v.v.

Matlab vs python cho máy tính khoa học


Matlab là một ngôn ngữ lập trình và môi trường tính toán số phổ biến, xem thêm trên wiki. Khái niệm Matlab đề cập đến toàn bộ gói, bao gồm cả IDE. Thư viện tiêu chuẩn không chứa nhiều chức năng lập trình chung nhưng bao gồm đại số ma trận và một thư viện mở rộng để xử lý dữ liệu và vẽ đồ thị

Để có chức năng tương tự trong Python, bạn sẽ cần các gói NumPy, SciPy và Matplotlib. Scipy là một gói có mục tiêu cung cấp tất cả các chức năng khác của Matlab, bao gồm cả những chức năng trong hộp công cụ Matlab (bạn sẽ phải trả thêm phí trong Matlab). Tuy nhiên, Simulink là một ví dụ không có trong Python. Nếu bạn phụ thuộc vào nó, có lẽ bạn nên gắn bó với Matlab. Có thể trong tương lai, một giải pháp thay thế Python sẽ được tạo ra

Ngoài ra, bạn sẽ cần một IDE. Nhiều pythoneer đến từ môi trường Linux và sử dụng trình bao Python và một trong nhiều trình soạn thảo, nhưng những người đến từ Matlab thường không thích điều này (bao gồm cả tôi). Có một số IDE có sẵn, một số miễn phí

Vì Python mở và miễn phí nên các bên khác rất dễ dàng thiết kế các gói hoặc công cụ phần mềm khác mở rộng Python. Có thể tạo các ứng dụng bằng bất kỳ thư viện GUI nào của thị trưởng (TK, WX, GTK, QT,. ), sử dụng OpenGL, điều khiển cổng USB của bạn, v.v. Một ví dụ khác là pyrex/cython để nâng cao tốc độ của thuật toán bằng cách chuyển đổi Python sang mã C và py2exe và tương tự để tạo một ứng dụng độc lập từ nguồn của bạn

CẬP NHẬT 12/8/2019. Mathworks đã xóa bài đăng gốc mà blog này nhằm giải quyết vào khoảng thời gian tôi hoàn thành việc viết nó. Tuy nhiên, có thể có những mẹo hữu ích khác có trong sổ tay, vì vậy tôi vẫn đăng nó. Liên kết đến bài viết gốc bên dưới đã được thay thế trên trang web Mathworks bằng các liên kết đến các tính năng tương tác của Python/Matlab


Gần đây tôi đã biết về một nơi họ so sánh MATLAB và Python trong nỗ lực chứng minh rằng MATLAB là ngôn ngữ ưu việt cho tính toán kỹ thuật và khoa học

MATLAB là một ngôn ngữ điện toán hữu ích và mạnh mẽ và hơn thế nữa. Nó được phân phối và sử dụng điển hình thông qua một môi trường phát triển tích hợp (IDE) rất bóng bẩy và có nhiều hộp công cụ bổ trợ cho một loạt các tác vụ điện toán khoa học. Mặc dù một số tuyên bố trong bài đăng là đúng, nhưng phần lớn trong số đó là sai lệch nghiêm trọng

Tôi sẽ cố gắng phản bác lại nhiều tuyên bố đó trong bài đăng này

Yêu cầu đầu tiên là mã MATLAB dễ đọc hơn đối với các nhà khoa học và kỹ sư so với mã Python thực hiện một nhiệm vụ tương tự. Họ sử dụng các ví dụ mã sau đây để minh họa quan điểm của họ và thậm chí còn đi xa hơn để tuyên bố rằng họ là một lỗi trong hoạt động Python

Matlab vs python cho máy tính khoa học

Họ tuyên bố rằng giải pháp Python/NumPy không có kích thước chính xác để hỗ trợ hoạt động của sản phẩm bên ngoài. Điều này là do NumPy trước hết được tạo cho các hoạt động của mảng theo từng phần tử. Cần lưu ý rằng đây là một cú pháp rõ ràng hơn nhiều cho loại tính toán mảng thường được thực hiện trong khoa học dữ liệu, tuy nhiên, ví dụ sau có thể dễ dàng được sửa bằng cách thêm một bộ dấu ngoặc thứ hai để thêm rõ ràng thứ nguyên thứ hai vào . Ban đầu nó sẽ có hình dạng (1, 3) thay vì (3,). Điều này có thể được nhìn thấy bằng cách nhìn vào thuộc tính hình dạng của mảng

Trong 1]

import numpy as np
np.array([1, 2, 3]).shape

Ra[1]

(3,)

Trong 2]

np.array([[1, 2, 3]]).shape

Ra[2]

(1, 3)

Mã chính xác hiện tại (không bao gồm câu lệnh

outer = np.dot(col, row)
outer
3 vì nó đã được tải ở trên)

Trong 3]

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner

Ra[3]

array([[14]])

Trong [4]

outer = np.dot(col, row)
outer

Ra[4]

________số 8_______

Một phàn nàn khác là phép toán

outer = np.dot(col, row)
outer
4 là một lời gọi hàm thay vì một toán tử tích hợp sẵn. Họ không được biết toán tử
outer = np.dot(col, row)
outer
5 trong , e. g

Trong [5]

row @ col

Ra[5]

array([[14]])

Trong [6]

(3,)
0

Ra[6]

________số 8_______

Bây giờ bạn có thể nói rằng toán tử

outer = np.dot(col, row)
outer
5 không phải là cách chúng ta thường viết toán học ma trận/tenxơ bằng chữ viết tay hoặc khi sắp chữ một cuốn sách hoặc bài báo. Điều đó đúng, nhưng điều đó cũng tương tự đối với toán tử
outer = np.dot(col, row)
outer
7. Nếu bạn muốn cực kỳ dài dòng, bạn có thể sử dụng ký hiệu chỉ định của Einstien, tôi. e

\begin{align} \vec{a} \cdot \vec{b} = \sum_i a_i b_i = a_i b_i, \quad &\mbox{(tích bên trong)} \\ \vec{a} \otimes \vec{b

trong đó quy ước là tổng trên bất kỳ chỉ số lặp lại nào ngụ ý tổng và ký hiệu $\sum$ có thể được bỏ. Điều này có thể được thực hiện thông qua NumPy như

Trong [7]

(3,)
2

Ra[7]

(3,)
3

cho sản phẩm bên trong và

Trong [8]

(3,)
4

Ra[8]

________số 8_______

cho sản phẩm bên ngoài. Tất nhiên, chúng yêu cầu các lệnh gọi hàm tới

outer = np.dot(col, row)
outer
8, nhưng cú pháp ký hiệu chỉ định tuân theo ký hiệu toán học tensorial được viết một cách tự nhiên

Việc thêm kích thước bổ sung cũng có thể được thực hiện thông qua lập chỉ mục nếu mảng ban đầu không bao gồm đủ kích thước, e. g

Trong [9]

(3,)
6

Ra[9]

________số 8_______

Như đã đề cập ở trên, NumPy được thiết kế để tính toán mảng theo từng phần tử và cú pháp này rõ ràng hơn nhiều, e. g

Trong [10]

(3,)
8

Ra[10]

(3,)
9

Trong [11]

np.array([[1, 2, 3]]).shape
0

Ra[11]

np.array([[1, 2, 3]]).shape
1

Trong [12]

np.array([[1, 2, 3]]).shape
2

Ra[12]

np.array([[1, 2, 3]]).shape
3

Một biểu thức tương đương trong MATLAB yêu cầu sử dụng dấu chấm (. ) trước toán tử nhân

np.array([[1, 2, 3]]).shape
4

Cú pháp này có thể trở nên khó coi trong các biểu thức dài


Hãy xem xét thêm một vài tuyên bố

Các kỹ sư và nhà khoa học xứng đáng có được những công cụ phù hợp với cách họ làm việc. Họ không cần phải điều chỉnh cách họ làm việc để phù hợp với công cụ của họ

Các hàm Python thường được thiết kế và ghi lại bởi các lập trình viên cao cấp dành cho các lập trình viên có kinh nghiệm khác

Định nghĩa của một lập trình viên cao cấp là không chính xác và chủ quan. Họ có ngụ ý rằng MATLAB không được thiết kế và ghi lại bởi các lập trình viên cao cấp không? . g. NumPy và SciPy được phát triển bởi các kỹ sư. Nhà phát triển cốt lõi ban đầu của cả hai gói đó là Travis Oliphant, một kỹ sư điện được đào tạo, khi ông còn là sinh viên cao học và sau đó là giáo sư kỹ thuật điện. Mặc dù chúng tôi không biết chính xác ai đang viết mã Matlab, nhưng các gói Python khoa học được phát triển mở trên Github, nơi bạn có thể xem hồ sơ của từng người đóng góp. Hãy tự mình xem xét, ngoài Oliphant, người đóng góp lớn thứ hai là Charles Harris, chuyên gia vật lý và nhà toán học (cha và mẹ của ngành kỹ thuật. ), người đóng góp lớn thứ ba là David Cournapeau, một kỹ sư điện và nhà khoa học dữ liệu, v.v.

Môi trường phát triển Python cho máy tính khoa học thiếu độ tin cậy và tích hợp của máy tính để bàn MATLAB

Bạn đã bao giờ nghe nói về Spyder IDE chưa?

Matlab vs python cho máy tính khoa học

Trông rất giống MATLAB

Mọi thứ về MATLAB được thiết kế dành riêng cho các kỹ sư và nhà khoa học

  • Tên hàm và chữ ký quen thuộc và dễ nhớ, khiến chúng dễ viết cũng như dễ đọc

Điều này cũng đúng với NumPy và SciPy, nhiều tên giống hệt với MATLAB tương đương

Các giao diện chức năng mới trải qua một quy trình thiết kế nghiêm ngặt, thường bao gồm hàng chục đến hàng trăm giờ dành cho nhà phát triển cho mỗi chức năng

Vì vậy, bạn nói. Tôi có thể xem bộ thử nghiệm của bạn không? . Điều tương tự cũng xảy ra với SciPy và hầu hết phần còn lại của bộ Python khoa học

Khám phá và lặp lại

Họ tuyên bố

Môi trường máy tính để bàn được điều chỉnh cho quy trình công việc khoa học và kỹ thuật lặp lại

Có nhiều tùy chọn trong thế giới Python cung cấp giống nhau, Spyder như đã đề cập, PyCharm IDE và tất nhiên là Project Jupyter đáng kính với JupyterLab và Jupyter Notebooks

Các công cụ tích hợp hỗ trợ khám phá dữ liệu và chương trình đồng thời, cho phép bạn khám phá nhiều ý tưởng hơn trong thời gian ngắn hơn

Một lần nữa Spyder, PyCharm và JupyterLab cung cấp nhiều tính năng tương tự được tích hợp sẵn và thêm vào đó là thế giới tiện ích mở rộng đang phát triển cho Jupyter Notebooks và JupyterLab, e. g. một trình gỡ lỗi trực quan. Chưa kể đến việc dễ dàng tạo bảng điều khiển tương tác trong Jupyter Notebooks, tôi. e

Trong [36]

np.array([[1, 2, 3]]).shape
5

np.array([[1, 2, 3]]).shape
6

Tài liệu

Tài liệu được viết cho các kỹ sư và nhà khoa học, không phải nhà khoa học máy tính

Hãy so sánh tài liệu từ hai chức năng tương tự. Đầu tiên từ NumPy

Trong [14]

np.array([[1, 2, 3]]).shape
7

Ra[14]

Bây giờ từ MATLAB

Trong [15]

np.array([[1, 2, 3]]).shape
8

Ra[15]

Không thể hiểu lập luận ở đây. Cả hai tài liệu chức năng đều rõ ràng như nhau trong phần giải thích. Và điều này cũng đúng với tất cả các chức năng trong NumPy và SciPy

học máy


Tiếp theo họ trích dẫn một khách hàng

"Là một kỹ sư quy trình, tôi không có kinh nghiệm về mạng lưới thần kinh hoặc máy học. Tôi đã nghiên cứu các ví dụ MATLAB để tìm ra các chức năng học máy tốt nhất cho trường hợp sử dụng đo lường dự đoán của chúng tôi. Tôi không thể làm điều này bằng C hoặc Python—sẽ mất quá nhiều thời gian để tìm, xác thực và tích hợp các gói phù hợp. "

-Emil Schmitt-Weaver, ASML

Tôi không thể tranh luận với tuyên bố liên quan đến ngôn ngữ lập trình C. Tuy nhiên, trong hệ sinh thái Python, chúng tôi có Scikit-Learn, đây có thể là khung học máy được sử dụng nhiều nhất trên thế giới. Tài liệu cực kỳ phong phú với nhiều ví dụ và hướng dẫn. Bao gồm là sơ đồ cực kỳ hữu ích này để hỗ trợ chọn mô hình học máy để áp dụng

Matlab vs python cho máy tính khoa học

khi được xem từ trang web tài liệu gốc, các công cụ ước tính khác nhau bao gồm các siêu liên kết đến tài liệu cho từng phương pháp

Scikit-learning, NumPy, SciPy, Spyder IDE, Jupyter Notebooks và hơn 100 gói và công cụ hữu ích khác đều có trong Bản phân phối Python Anaconda miễn phí. Nó có thể được cài đặt trên tất cả các hệ điều hành máy tính chính (Windows, Linux, MacOS) với thời gian tải xuống và cài đặt nhanh hơn nhiều so với bản phân phối cơ bản của MATLAB. Nó bao gồm một trình khởi chạy ứng dụng thuận tiện cho các IDE/Jupyter Notebooks/JupyterLab khác nhau, v.v. Bắt đầu với ngăn xếp máy tính khoa học Python không thể dễ dàng hơn là sử dụng Phân phối Anaconda


Ứng dụng và bảng điều khiển

Tiếp theo, họ giới thiệu Ứng dụng MATLAB và tuyên bố rằng "Python không cung cấp các ứng dụng quy trình làm việc tích hợp cho các ứng dụng khoa học và kỹ thuật". Chà, điều đó đúng theo nghĩa là chúng không được tích hợp vào bất kỳ loại phân phối nào. Nhiều Ứng dụng MATLAB mà họ trích dẫn cũng không phải là một phần của bản phân phối MATLAB tiêu chuẩn, chúng được cung cấp dưới dạng các sản phẩm riêng biệt để mua. Điều này đúng với Hộp công cụ lắp đường cong chẳng hạn

Tuy nhiên, vì Python có cơ sở người dùng tổng thể lớn hơn nhiều, nên có rất nhiều ví dụ về các ứng dụng phức tạp được xây dựng bằng các công cụ nguồn mở có sẵn miễn phí, chẳng hạn như. g. Nhà thám hiểm taxi thành phố New York. Trên thực tế, chúng ta có thể xây dựng một giao diện người dùng đơn giản để điều chỉnh đường cong chỉ bằng một vài dòng Python

Trong [16]

np.array([[1, 2, 3]]).shape
9

Ra[16]

Tất nhiên điều này có thể được làm cho nhiều tính năng phong phú hơn, nhưng ý tưởng cơ bản được thể hiện với một lượng mã tối thiểu


yêu cầu tiếp theo

MATLAB giúp tự động hóa toàn bộ quá trình – từ nghiên cứu đến sản xuất

Đây chỉ là một quảng cáo chiêu hàng cho một sản phẩm riêng biệt khác để mua. Lần này dành cho Máy chủ Sản xuất MATLAB. Với các tuyên bố về việc triển khai các ứng dụng MATLAB cho các thiết bị IoT, đám mây, GPU, v.v. Vì Python được cài đặt theo mặc định hoặc dễ dàng thêm vào hầu như mọi máy chủ Linux trên thế giới, các ứng dụng Python cũng có thể được triển khai miễn phí, dễ dàng tới tất cả những nơi này.


về hiệu suất

Họ hiển thị con số này

Matlab vs python cho máy tính khoa học

nhưng không cung cấp mã nguồn hỗ trợ cho việc so sánh. Tất nhiên, nếu họ đang so sánh mã MATLAB được véc-tơ hóa và/hoặc được biên dịch với các vòng lặp

outer = np.dot(col, row)
outer
9 thuần túy của Python, thì MATLAB sẽ luôn nhanh hơn. Hãy làm một vài so sánh của riêng chúng tôi

Hãy thêm 1 đến một triệu số. Chúng ta sẽ định nghĩa một hàm theo cú pháp Python thuần túy (không có NumPy)

Trong [17]

(1, 3)
0

Chúng ta có thể sử dụng lệnh ma thuật IPython

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
0 để định thời gian thực hiện chức năng này và báo cáo một số thống kê

Trong [18]

(1, 3)
1

(1, 3)
2

Tất nhiên, trong đoạn mã trên, mảng

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
1 được xây dựng lại mỗi lần thông qua vòng lặp
outer = np.dot(col, row)
outer
9. Chúng ta có thể nhận được hiệu suất cao hơn một chút và cú pháp rõ ràng hơn bằng cách sử dụng Tính năng hiểu danh sách Python

Trong 19]

(1, 3)
3

Một lần nữa sử dụng mô-đun

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
0, chúng ta có thể thấy rằng phương pháp hiểu danh sách có phần nhanh hơn

Trong 20]

(1, 3)
4

(1, 3)
5

Một trong những tuyên bố trong bài báo là tất cả mã MATLAB đều được biên dịch đúng lúc (JIT). Python có một trình biên dịch tức thời cũng có sẵn thông qua gói Numba. Tất cả những gì chúng ta phải làm là nhập và thêm trình trang trí chức năng một dòng vào mã ở trên để sử dụng nó

Trong [21]

(1, 3)
6

Ở đây, chúng tôi thấy hiệu suất tăng thêm với rất ít nỗ lực bằng cách sử dụng trình biên dịch JIT. Tôi gọi hàm một lần để cho phép quá trình biên dịch JIT diễn ra trước khi thực hiện thao tác định thời

Trong [22]

(1, 3)
7

(1, 3)
8

Cuối cùng, chúng tôi chuyển sang giải pháp đơn giản nhất. Sử dụng mảng NumPy và phát sóng phần bổ sung

Trong [23]

(1, 3)
9

Và chúng tôi thấy sự cải thiện khoảng 2 bậc độ lớn

Trong [24]

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
0

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
1

Cuối cùng, chúng ta có thể đạt được hiệu suất cao hơn một chút bằng cách thêm trình biên dịch JIT (với thực thi song song) vào hàm NumPy. Giống như lần trước, chúng ta sẽ gọi hàm cho phép biên dịch JIT trước khi thực hiện thao tác định thời

Trong [25]

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
2

Trong [26]

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
3

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
4

Có vẻ như chỉ nhanh hơn một chút, nhưng không có nghĩa là như vậy, có lẽ nếu vectơ

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
4 lớn hơn nhiều, chúng ta có thể thấy lợi ích thực sự của việc thực thi song song

Bây giờ chúng ta sẽ viết mã tương tự trong MATLAB, viết một tệp hàm

Trong [27]

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
5

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
6

và chạy mã từ dòng lệnh. Ở đây, lưu ý rằng tôi phân bổ đối số

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
4 trước và thực hiện lệnh gọi hàm tới
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
6 trước lệnh gọi thứ hai tới
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
7 xung quanh bởi các dấu thời gian
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
8 và
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
9. Điều này là để cho phép bất kỳ quá trình biên dịch JIT nào xảy ra trước khi thử tính thời gian. Chúng tôi không nhận được số liệu thống kê mà
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
0 cung cấp cho chúng tôi, nhưng chúng tôi thấy rằng việc triển khai này nhanh hơn cách tiếp cận Python thuần túy, nhưng chậm hơn mã Numba JIT từ Python và chậm hơn nhiều so với mã NumPy

Trong [28]

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
7

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
8

Mặc dù đoạn mã trên được viết gần với cách tiếp cận Python thuần túy ở trên, nhưng hầu hết mọi người đều biết rằng việc phân bổ trước các mảng của bạn trong MATLAB có thể tăng tốc mã. Vì vậy, hãy làm điều đó

Trong [29]

row = np.array([[1, 2, 3]])

col = row.T

inner = np.dot(row, col)
inner
9

array([[14]])
0

Một chút cải tiến ở đây, nhưng vẫn chưa bằng tốc độ của mã NumPy

Trong [30]

array([[14]])
1

array([[14]])
2

Cuối cùng, hãy thử phương pháp vector hóa trong MATLAB

Trong [31]

array([[14]])
3

array([[14]])
4

Đây là cách tiếp cận nhanh nhất trong MATLAB;

Trong [32]

array([[14]])
5

array([[14]])
6

Bây giờ tôi không khẳng định rằng mã Python/NumPy sẽ luôn nhanh hơn MATLAB. Nhưng không quá khó để tìm thấy một số ví dụ (rất) đơn giản trong đó rõ ràng không phải vậy. Nếu họ định đưa ra những tuyên bố táo bạo như những tuyên bố trong hình trên, họ nên xuất bản mã nguồn của từng triển khai để đảm bảo rằng các mã được viết theo cách bình đẳng tương ứng. Có rất nhiều tối ưu hóa nhỏ có thể được thực hiện bằng cả hai ngôn ngữ để tăng tốc thời gian chạy mã


Những bình luận khác

Họ tiếp tục đưa ra nhiều tuyên bố hơn và báo cáo những nhược điểm có chủ đích của Python, chẳng hạn như thực tế rằng Python là ngôn ngữ máy tính có mục đích chung chứ không phải ngôn ngữ định hướng toán học và ma trận. Đây thực tế là một tài sản, không phải là trở ngại của Python. Bản chất mục đích chung có nghĩa là có nhiều người dùng hơn về tổng thể, điều này có nghĩa là sẽ có nhiều trợ giúp hơn cho người mới bắt đầu. Python được đánh giá cao thứ 5 trên Stack Overflow, trang web hỏi đáp dành cho lập trình viên. Matlab không xuất hiện dưới dạng thẻ trên ít nhất trang đầu tiên của 32 thẻ khác nhau

Họ phàn nàn rằng các công cụ trực quan hóa trong hệ sinh thái Python bị phân mảnh. Vâng, có một số thư viện hữu ích khác nhau để trực quan hóa. Tuy nhiên, Matplotlib là lựa chọn mặc định và bắt chước hầu hết hoặc tất cả các khả năng của MATLAB vì nó được truyền cảm hứng rất nhiều từ nó. Trên thực tế, tôi sẽ khẳng định rằng bất kỳ hình ảnh 2D nào bạn từng thấy đều có thể được sao chép bằng Matplotlib. Xem thư viện ví dụ mở rộng để biết thêm bằng chứng về tuyên bố này. Có những thư viện vẽ đồ thị tuyệt vời khác, chẳng hạn như Bokeh, người tập trung vào việc tạo các số liệu tương tác được hiển thị bằng JavaScript và dành để hiển thị trên các trang web. Chúng có thể bao gồm các ô có thể gọi lại bằng ngôn ngữ Python để cập nhật tương tác thông qua tính toán phức tạp và/hoặc dữ liệu phát trực tuyến theo thời gian thực. Các loại trực quan hóa tương tác này có thể được triển khai miễn phí cho các trang web. Bất kỳ khả năng tương tác nào có sẵn thông qua trực quan hóa MATLAB đều yêu cầu phiên bản MATLAB được cấp phép đang chạy để phục vụ trực quan hóa. Chúng không thể được triển khai, chắc chắn là không miễn phí, cho mọi người thông qua một máy chủ web tiêu chuẩn. Matplotlib và Bokeh có thể được sử dụng có chọn lọc làm phần phụ trợ trong thư viện vẽ sơ đồ thống nhất có tên là Holoviews. Holoviews cho phép bạn tạo các hình ảnh trực quan đẹp mắt với một vài lệnh có thể được hiển thị bằng Bokeh (đối với các số liệu dành cho các trang web) hoặc Matplotlib (đối với các số liệu dành cho các ấn phẩm in) một cách dễ dàng. Nếu bạn thích cách tiếp cận Ngữ pháp đồ họa hơn để trực quan hóa, có những gói tuyệt vời khác như Altair và ggplot. Một lần nữa, sự đa dạng của các lựa chọn là một tài sản, không phải là trở ngại đối với hệ sinh thái Python

Họ tuyên bố rằng "Bộ giải mã MATLAB tạo mã C và C++ di động, có thể đọc được". Một người khác bán quảng cáo chiêu hàng cho một sản phẩm được cung cấp bên ngoài phân phối MATLAB cơ sở. Do tính chất nguồn mở và di động của Python và các gói khoa học Python, thường không có lý do gì để làm điều đó. Toàn bộ khung gói thường có thể được chuyển sang sản xuất với nhu cầu thay đổi bất kỳ thứ gì và chắc chắn không có vấn đề cấp phép mà người ta sẽ gặp phải khi chạy MATLAB. Một trường hợp sử dụng thường xuyên hơn là sử dụng Python để "kết dính" các lệnh gọi hàm C/C++/Fortran từ các thư viện. Chúng tôi đã chứng minh cách chúng tôi có thể đạt được tốc độ mã C gần với Numba và điều đó thường là quá đủ. Có các gói khác như CFFI cho phép bạn viết và biên dịch mã C có thể dễ dàng gọi từ Python. Điều này bao gồm mã gọi các chức năng từ các thư viện khác, chẳng hạn như OpenMP để xử lý song song luồng. Dưới đây là một ví dụ đơn giản, phần quan trọng ở đây là mã C chứa trong đối số

row @ col
1. Nó sử dụng OpenMP để làm cho luồng 9 vòng lặp
outer = np.dot(col, row)
outer
song song

Trong [33]

array([[14]])
7

array([[14]])
8

Bây giờ chúng ta có thể biên dịch mã thành thư viện động và CFFI tự động tạo trình bao bọc giao diện Python

Trong [34]

array([[14]])
9

outer = np.dot(col, row)
outer
0

Đây là đoạn script ngắn gọi hàm. Bắt chước hành vi của các hàm

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
6 ở trên

Trong [35]

outer = np.dot(col, row)
outer
1

outer = np.dot(col, row)
outer
2

Tất nhiên, cái này nhanh hơn tất cả trừ hàm

row @ col
4 ở trên (về cơ bản chúng có cùng tốc độ) vì cả hai đều có mã đối tượng tương đương

Cuối cùng, hầu hết các đối số còn lại trong bài đăng của họ đều đưa ra các tuyên bố liên quan đến việc thiếu các tính năng tích hợp trong Python. Tôi cho rằng họ đang nói về ngôn ngữ Python cốt lõi và điều này rất dễ gây hiểu lầm trong bối cảnh Điện toán khoa học vì không có công việc nào hoạt động trong không gian này cố gắng làm như vậy với Python thuần túy, mọi người đều sử dụng các thư viện được thảo luận trong bài đăng này và thông thường, mọi người đều

Bài đăng này có thể được truy cập ở dạng ban đầu dưới dạng sổ ghi chép Jupyter tại đây. Tất nhiên, bạn sẽ cần cài đặt MATLAB đang chạy và có thể phải thay đổi đường dẫn tệp thành tệp thực thi để các ô mã này có thời gian MATLAB hoạt động bình thường

Tại sao Python tốt hơn MATLAB cho khoa học?

Python là ngôn ngữ cấp cao, nó thân thiện với người dùng hơn, dễ đọc hơn và di động hơn . MATLAB là một ngôn ngữ cấp thấp và không giỏi trong một số thuật toán như tin sinh học. MATLAB có chức năng của ma trận và Python có thể sử dụng NumPy và thư viện có thể đạt được kết quả tương tự.

Python hay MATLAB hữu ích hơn là gì?

Phần này có câu trả lời dễ dàng. Python thắng Matlab . Python có rất nhiều thư viện và gói cho cả mô hình máy học cũ và mới. Thêm vào đó, Python là ngôn ngữ được sử dụng rộng rãi nhất cho nghiên cứu máy học hiện đại trong ngành công nghiệp và học thuật.

Python sẽ thay thế MATLAB?

Python có thể thay thế MATLAB . Mặc dù Python không nhằm mục đích thay thế miễn phí cho MATLAB, nhưng nó thực sự rất phù hợp với vai trò này. Nhiều người đã chuyển đổi thành công từ MATLAB sang Python.

MATLAB có đáng học vào năm 2022 không?

Nó chắc chắn xứng đáng với nhiều người mong muốn theo đuổi sự nghiệp phát triển phần mềm trong nhiều lĩnh vực quan trọng khác nhau, bao gồm hệ điều hành thương mại, máy tính hiệu suất cao (ví dụ: trong phòng thí nghiệm quốc gia), .