Toán tử dấu gạch chéo ngược Matlab trong Python

Tổng / tối đa / tối thiểu của mỗi cột

sum(A, 1)
max(A, [], 1)
min(A, [], 1)

sum(A, 0)
np.amax(A, 0)
np.amin(A, 0)

sum(A, dims = 1)
maximum(A, dims = 1)
minimum(A, dims = 1)

Tổng / tối đa / tối thiểu của mỗi hàng

sum(A, 2)
max(A, [], 2)
min(A, [], 2)

sum(A, 1)
np.amax(A, 1)
np.amin(A, 1)

sum(A, dims = 2)
maximum(A, dims = 2)
minimum(A, dims = 2)

Tổng/tối đa/tối thiểu của toàn bộ ma trận

sum(A(:))
max(A(:))
min(A(:))

np.sum(A)
np.amax(A)
np.amin(A)

________số 8_______

Tổng cộng / tối đa / tối thiểu theo hàng

cumsum(A, 1)
cummax(A, 1)
cummin(A, 1)

sum(A, 0)
np.amax(A, 0)
np.amin(A, 0)
0

sum(A, 0)
np.amax(A, 0)
np.amin(A, 0)
1

Tổng cộng / tối đa / tối thiểu theo cột

sum(A, 0)
np.amax(A, 0)
np.amin(A, 0)
2

sum(A, 0)
np.amax(A, 0)
np.amin(A, 0)
3

sum(A, 0)
np.amax(A, 0)
np.amin(A, 0)
4

MATLAB® và. NumPy/. SciPy có nhiều điểm chung. Nhưng có nhiều sự khác biệt. NumPy và SciPy được tạo ra để thực hiện tính toán số và khoa học theo cách tự nhiên nhất với Python, không phải là bản sao của MATLAB®. Trang này nhằm mục đích trở thành nơi thu thập kiến ​​thức về sự khác biệt, chủ yếu nhằm mục đích giúp người dùng MATLAB® thành thạo trở thành người dùng NumPy và SciPy thành thạo. NumPyProConPage là một trang khác dành cho những người tò mò đang nghĩ đến việc áp dụng Python với NumPy và SciPy thay vì MATLAB® và muốn xem danh sách ưu và nhược điểm

Trong MATLAB®, kiểu dữ liệu cơ bản là một mảng đa chiều gồm các số dấu phẩy động có độ chính xác kép. Hầu hết các biểu thức lấy các mảng như vậy và trả về các mảng đó. Các phép toán trên các phiên bản 2-D của các mảng này được thiết kế để hoạt động ít nhiều giống như các phép toán ma trận trong đại số tuyến tính

Trong NumPy, kiểu cơ bản là một mảng nhiều chiều. Các thao tác trên các mảng này ở tất cả các chiều bao gồm cả 2D là các thao tác theo phần tử. Tuy nhiên, có một loại ma trận đặc biệt để làm đại số tuyến tính, nó chỉ là một lớp con của lớp mảng. Các phép toán trên mảng ma trận là các phép toán đại số tuyến tính

MATLAB® sử dụng 1 (một) chỉ mục dựa trên. Phần tử ban đầu của một chuỗi được tìm thấy bằng cách sử dụng a(1).

Python sử dụng lập chỉ mục dựa trên 0 (không). Phần tử ban đầu của một chuỗi được tìm thấy bằng cách sử dụng [0]

Ngôn ngữ kịch bản của MATLAB® được tạo ra để thực hiện đại số tuyến tính. Cú pháp cho các hoạt động ma trận cơ bản là tốt và rõ ràng, nhưng API để thêm GUI và tạo các ứng dụng chính thức ít nhiều là một suy nghĩ sau

NumPy dựa trên Python, được thiết kế ngay từ đầu để trở thành ngôn ngữ lập trình đa năng xuất sắc. Mặc dù cú pháp của Matlab cho một số thao tác với mảng nhỏ gọn hơn của NumPy, nhưng NumPy (do là một tiện ích bổ sung cho Python) có thể thực hiện nhiều việc mà Matlab không thể làm được, chẳng hạn như phân lớp con kiểu mảng chính để thực hiện cả phép toán mảng và ma trận một cách rõ ràng

Trong MATLAB®, các mảng có ngữ nghĩa truyền theo giá trị, với sơ đồ sao chép khi ghi lười biếng để ngăn việc tạo các bản sao thực sự cho đến khi chúng thực sự cần thiết. Thao tác cắt sao chép các phần của mảng

Trong các mảng NumPy có ngữ nghĩa truyền qua tham chiếu. Thao tác lát cắt là các khung nhìn thành một mảng

Trong MATLAB®, mọi hàm phải nằm trong một tệp cùng tên và bạn không thể xác định các hàm cục bộ trong tệp tập lệnh thông thường hoặc tại dấu nhắc lệnh (nội tuyến không phải là hàm thực mà là macro, như trong C)

Mã NumPy là mã Python, vì vậy nó không có hạn chế như vậy. Bạn có thể xác định chức năng bất cứ nơi nào bạn muốn

MATLAB® có một cộng đồng tích cực và có rất nhiều mã miễn phí. Nhưng sức sống của cộng đồng bị giới hạn bởi chi phí của MATLAB®;

NumPy/. SciPy cũng có một cộng đồng tích cực, dựa trên trang web này. Nó nhỏ hơn, nhưng nó đang phát triển rất nhanh. Ngược lại, các chương trình Python có thể được phân phối lại và sử dụng tự do. Xem Topical_Software để biết danh sách phần mềm ứng dụng bổ sung miễn phí, Mailing_Lists để thảo luận và phần còn lại của trang web này để biết thêm đóng góp của cộng đồng. Chúng tôi khuyến khích sự tham gia của bạn

MATLAB® có một bộ mở rộng các tiện ích bổ sung tùy chọn, dành riêng cho miền ('hộp công cụ') có sẵn để mua, chẳng hạn như để xử lý tín hiệu, tối ưu hóa, hệ thống điều khiển và toàn bộ hệ thống SimuLink® để tạo đồ họa các mô hình hệ thống động

Hiện tại không có tương đương trực tiếp với điều này trong thế giới phần mềm tự do, về phạm vi và độ sâu của các tiện ích bổ sung. Tuy nhiên, danh sách trong Topical_Software chắc chắn cho thấy xu hướng ngày càng tăng theo hướng đó

MATLAB® có hệ thống đồ thị 2-d và 3-d tinh vi, với các tiện ích giao diện người dùng

Phần mềm bổ trợ có thể được sử dụng với Numpy để tạo các biểu đồ có thể so sánh với MATLAB®. Matplotlib là thư viện vẽ sơ đồ 2 chiều hoàn thiện mô phỏng giao diện MATLAB®. PyQwt cho phép giao diện người dùng mạnh hơn và nhanh hơn MATLAB®. Và mlab, API "giống như matlab" dựa trên Mayavi2, để vẽ sơ đồ 3D của mảng Numpy. Xem trang Topical_Software để biết thêm tùy chọn, liên kết và chi tiết. Tuy nhiên, không có giải pháp vẽ đồ thị tích hợp, tất cả trong một, dễ sử dụng, dứt khoát cho 2-d và 3-d. Đây là khu vực mà Numpy/Scipy có thể sử dụng một số công việc

MATLAB® cung cấp môi trường phát triển đầy đủ với cửa sổ tương tác lệnh, trình chỉnh sửa tích hợp và trình gỡ lỗi

Numpy không có một IDE tiêu chuẩn. Tuy nhiên, môi trường IPython cung cấp một dấu nhắc lệnh tinh vi với đầy đủ hỗ trợ hoàn thành, trợ giúp và gỡ lỗi cũng như giao diện với thư viện Matplotlib để vẽ đồ thị và trình chỉnh sửa Emacs/XEmacs

Bản thân MATLAB® có giá hàng nghìn đô la nếu bạn không phải là sinh viên. Mã nguồn của gói chính không có sẵn cho người dùng thông thường. Bạn không thể tự cô lập hay sửa lỗi và các vấn đề về hiệu suất, cũng như không thể trực tiếp tác động đến hướng phát triển trong tương lai. (Tuy nhiên, nếu bạn thực sự thích cú pháp giống Matlab, thì có Octave, một môi trường tính toán số khác cho phép sử dụng hầu hết các cú pháp Matlab mà không cần sửa đổi. )

NumPy và SciPy miễn phí (cả bia và lời nói), dù bạn là ai

Câu trả lời ngắn

sử dụng mảng

  • Chúng là loại vectơ/ma trận/tensor tiêu chuẩn của numpy. Nhiều hàm numpy trả về mảng, không phải ma trận
  • Có sự phân biệt rõ ràng giữa các phép toán phần tử khôn ngoan và các phép toán đại số tuyến tính
  • Bạn có thể có các vectơ chuẩn hoặc vectơ hàng/cột nếu muốn

Nhược điểm duy nhất của việc sử dụng kiểu mảng là bạn sẽ phải sử dụng dấu chấm thay vì * để nhân (giảm) hai thang đo (tích vô hướng, phép nhân vectơ ma trận, v.v. )

Câu trả lời dài

Numpy chứa cả lớp mảng và lớp ma trận. Lớp mảng nhằm mục đích trở thành một mảng n chiều có mục đích chung cho nhiều loại tính toán số, trong khi ma trận nhằm tạo điều kiện cụ thể cho các phép tính đại số tuyến tính. Trong thực tế, chỉ có một số khác biệt chính giữa hai

  • Toán tử *, dấu chấm() và phép nhân()

    • Đối với mảng, '*' có nghĩa là phép nhân theo phần tử và hàm dot() được sử dụng để nhân ma trận

    • Đối với ma trận, '*' có nghĩa là phép nhân ma trận và hàm multi() được sử dụng để nhân phần tử

  • Xử lý vectơ (mảng hạng 1)
    • Đối với mảng, các hình dạng vectơ 1xN, Nx1 và N đều khác nhau. Các phép toán như A[. ,1] trả về mảng hạng 1 của hình N, không phải mảng hạng 2 của hình Nx1. Chuyển đổi trên mảng hạng 1 không làm gì cả

    • Đối với ma trận, mảng hạng 1 luôn được chuyển đổi ngược thành ma trận 1xN hoặc Nx1 (vectơ hàng hoặc cột). MỘT[. ,1] trả về ma trận hạng 2 có hình dạng Nx1

  • Xử lý các mảng có thứ hạng cao hơn (xếp hạng > 2)

    • các đối tượng mảng có thể có thứ hạng> 2

    • các đối tượng ma trận luôn có thứ hạng chính xác là 2

  • thuộc tính tiện lợi
    • mảng có một. Thuộc tính T, trả về chuyển vị của dữ liệu

    • ma trận cũng có. H,. Tôi và. Một thuộc tính, lần lượt trả về chuyển vị liên hợp, nghịch đảo và asarray() của ma trận

  • nhà xây dựng tiện lợi
    • Hàm tạo mảng lấy các chuỗi Python (lồng nhau) làm bộ khởi tạo. Như trong, mảng([[1,2,3],[4,5,6]])

    • Ngoài ra, hàm tạo ma trận có một trình khởi tạo chuỗi thuận tiện. Như trong matrix("[1 2 3; 4 5 6]")

Có những ưu và nhược điểm khi sử dụng cả hai

  • mảng

    • Bạn có thể coi mảng hạng 1 là vectơ hàng hoặc cột. dot(A,v) coi v là vectơ cột, trong khi dot(v,A) coi v là vectơ hàng. Điều này có thể giúp bạn không phải gõ nhiều chuyển vị

    • Việc phải sử dụng hàm dot() để nhân ma trận rất lộn xộn -- dot(dot(A,B),C) vs. A*B*C

    • Nhân tố khôn ngoan là dễ dàng. A*B

    • mảng là loại NumPy "mặc định", do đó, nó được thử nghiệm nhiều nhất và là loại có nhiều khả năng được mã bên thứ 3 sử dụng NumPy trả về nhất

    • Là khá ở nhà xử lý dữ liệu của bất kỳ thứ hạng

    • Gần gũi hơn về ngữ nghĩa với đại số tensor, nếu bạn đã quen với điều đó

    • Tất cả các hoạt động (*, /, +, ** vv. ) theo nguyên tố

  • ma trận

    • Hành vi giống như hành vi của ma trận MATLAB®

    • Tối đa hạng 2. Để giữ dữ liệu hạng 3, bạn cần mảng hoặc có lẽ là danh sách ma trận Python

    • Tối thiểu hạng 2. Bạn không thể có vectơ. Chúng phải được truyền dưới dạng ma trận một cột hoặc một hàng

    • Vì mảng là mặc định trong NumPy, một số hàm có thể trả về một mảng ngay cả khi bạn cung cấp cho chúng một ma trận làm đối số. Điều này không nên xảy ra với các hàm NumPy (nếu đó là lỗi), nhưng mã của bên thứ 3 dựa trên NumPy có thể không tôn trọng việc bảo toàn kiểu như NumPy.

    • A*B là phép nhân ma trận nên thuận tiện hơn cho đại số tuyến tính

    • Phép nhân theo nguyên tố yêu cầu gọi một hàm, multipy(A,B)

    • Việc sử dụng quá tải toán tử là một chút phi logic. * không hoạt động theo phần tử nhưng / không

Do đó, mảng được khuyến khích sử dụng nhiều hơn, nhưng cuối cùng, bạn không thực sự phải chọn cái này hay cái kia. Bạn có thể trộn và kết hợp. Bạn có thể sử dụng mảng cho phần lớn mã của mình và chuyển sang ma trận trong các phần mà bạn có đại số tuyến tính thực chất với nhiều phép nhân ma trận-ma trận

Numpy có một số tính năng tạo thuận lợi cho việc sử dụng loại ma trận, hy vọng sẽ giúp mọi việc chuyển đổi Matlab dễ dàng hơn

  • Một mô-đun matlib đã được thêm vào có chứa các phiên bản ma trận của các hàm tạo mảng phổ biến như cái(), số không(), trống(), mắt(), rand(), repmat(), v.v. Thông thường, các hàm này trả về các mảng, nhưng các phiên bản matlib trả về các đối tượng ma trận

  • mat đã được thay đổi thành một từ đồng nghĩa với asmatrix, thay vì ma trận, do đó làm cho nó trở thành cách ngắn gọn để chuyển đổi một mảng thành ma trận mà không cần sao chép dữ liệu

  • Một số chức năng cấp cao nhất đã bị xóa. Ví dụ như numpy. Rand() bây giờ cần được truy cập dưới dạng numpy. ngẫu nhiên. rand(). Hoặc sử dụng rand() từ mô-đun matlib. Nhưng cách "numpythonic" là sử dụng numpy. ngẫu nhiên. random(), lấy một bộ cho hình dạng, giống như các hàm numpy khác

Bảng dưới đây đưa ra các giá trị tương đương sơ bộ cho một số biểu thức MATLAB® phổ biến. Đây không phải là tương đương chính xác, nhưng nên được coi là gợi ý để giúp bạn đi đúng hướng. Để biết thêm chi tiết, hãy đọc tài liệu tích hợp về các hàm NumPy

Cần cẩn thận khi viết các hàm lấy mảng hoặc ma trận làm đối số --- nếu bạn đang mong đợi một mảng và được cung cấp một ma trận hoặc ngược lại, thì '*' (phép nhân) sẽ cho bạn kết quả không mong muốn. Bạn có thể chuyển đổi qua lại giữa các mảng và ma trận bằng cách sử dụng

  • lộn xộn. luôn trả về một đối tượng kiểu mảng

  • asmatrix hoặc mat. luôn trả về một đối tượng kiểu ma trận

  • asanyarray. luôn trả về một đối tượng mảng hoặc một lớp con bắt nguồn từ nó, tùy thuộc vào đầu vào. Chẳng hạn, nếu bạn chuyển vào một ma trận, nó sẽ trả về một ma trận

Tất cả các hàm này đều chấp nhận cả mảng và ma trận (trong số những thứ khác như danh sách Python) và do đó rất hữu ích khi viết các hàm chấp nhận bất kỳ đối tượng giống như mảng nào

Trong bảng bên dưới, giả sử rằng bạn đã thực hiện các lệnh sau trong Python

from numpy import *
import scipy as Sci
import scipy.linalg

Cũng giả sử bên dưới rằng nếu Ghi chú nói về "ma trận" thì các đối số là các thực thể hạng 2

ĐÂY LÀ TÀI LIỆU WIKI ĐANG PHÁT TRIỂN. Nếu bạn tìm thấy một lỗi, hoặc có thể điền vào một ô trống, xin vui lòng sửa nó. Nếu có thứ gì đó bạn muốn thấy được thêm vào, chỉ cần thêm nó

Mục đích chung tương đương

MATLAB

cục mịch

ghi chú

chức năng trợ giúp

thông tin (func) hay trợ giúp (func) hay func?

nhận trợ giúp về chức năng func

chức năng nào

()

tìm ra nơi chức năng được xác định

gõ chức năng

nguồn (func) hay func??

nguồn in cho func (nếu không phải là chức năng gốc)

một && b

A và B

toán tử logic AND ngắn mạch (toán tử gốc Python);

một. b

a hoặc b

đoản mạch toán tử logic OR (toán tử gốc Python);

1*i,1*j,1i,1j

1j

số phức

tập phim

khoảng cách(1)

Khoảng cách giữa 1 và số dấu phẩy động gần nhất

thơ45

scipy. tích hợp. ca ngợi (f). set_integrator('dopri5')

tích hợp một ODE với Runge-Kutta 4,5

ode15s

scipy. tích hợp. ca ngợi (f). \
set_integrator('vode', method='bdf', order=15)

tích hợp một ODE với BDF

Đại số tuyến tính tương đương

Thảm ký hiệu (. ) có nghĩa là sử dụng cùng một biểu thức như mảng, nhưng chuyển đổi thành ma trận bằng trình chuyển đổi kiểu mat()

Các ký hiệu asarray (. ) có nghĩa là sử dụng cùng một biểu thức như ma trận, nhưng chuyển đổi thành mảng bằng trình chuyển đổi kiểu asarray()

MATLAB

cục mịch. mảng

cục mịch. ma trận

ghi chú

ndim(a)

ndim(a) hoặc một. đim

lấy số thứ nguyên của a (xếp hạng tensor)

số(a)

kích thước (a) hoặc một. kích thước

lấy số phần tử của mảng

kích thước (a)

hình dạng (a) hoặc một. hình dạng

lấy "kích thước" của ma trận

kích thước (a, n)

a. hình dạng[n-1]

lấy số phần tử của chiều thứ n của mảng a. (Lưu ý rằng MATLAB® sử dụng lập chỉ mục dựa trên 1 trong khi Python sử dụng lập chỉ mục dựa trên 0, )

[ 1 2 3;

mảng ([[1. ,2. ,3. ],
[4. ,5. ,6. ]])

thảm([[1. ,2. ,3. ],
[4. ,5. ,6. ]]) hoặc là
mat("1 2 3; 4 5 6")

Ma trận 2x3 theo nghĩa đen

[ a b;

vstack([hstack([a,b]),
hstack([c,d])])

bmat('a b; c d')

xây dựng một ma trận từ các khối a, b, c và d

một (kết thúc)

một[-1]

một[. ,-1][0,0]

truy cập phần tử cuối cùng trong ma trận 1xn a

a(2,5)

một[1,4]

phần tử truy cập ở hàng thứ hai, cột thứ năm

a(2,. )

a[1] hoặc a[1,. ]

toàn bộ hàng thứ hai của một

một(1. 5,. )

một[0. 5] hoặc một [. 5] hoặc a[0. 5,. ]

năm hàng đầu tiên của một

a(end-4. kết thúc,. )

một[-5. ]

năm hàng cuối cùng của một

một(1. 3,5. 9)

một[0. 3][. ,4. 9]

hàng một đến ba và cột năm đến chín của một. Điều này cho phép truy cập chỉ đọc

a([2,4,5],[1,3])

a[ix_([1,3,4],[0,2])]

hàng 2,4 và 5 và cột 1 và 3. Điều này cho phép ma trận được sửa đổi và không yêu cầu một lát thông thường

một(3. 2. 21,. )

một[ 2. 21. 2,. ]

mọi hàng khác của a, bắt đầu từ hàng thứ ba và đi đến hàng thứ hai mươi mốt

một(1. 2. kết thúc,. )

một[. 2,. ]

mọi hàng khác của a, bắt đầu với hàng đầu tiên

một (kết thúc. -1. 1,. ) hoặc flipud(a)

một[. -1,. ]

a với các hàng theo thứ tự ngược lại

một([1. kết thúc 1],. )

một[r_[. len(a),0]]

a với bản sao của hàng đầu tiên nối vào cuối

a. '

a. chuyển vị() hoặc một. T

chuyển vị của một

một'

a. conj(). chuyển vị() hoặc một. conj(). T

a. H

chuyển vị liên hợp của một

a * b

chấm(a,b)

a * b

nhân ma trận

một. * b

a * b

nhân(a,b)

phần tử khôn ngoan nhân

a. /b

a/b

phân chia phần tử khôn ngoan

a. ^3

một**3

sức mạnh(a,3)

lũy thừa phần tử khôn ngoan

(a>0. 5)

(a>0. 5)

ma trận có phần tử thứ i,j là (a_ij > 0. 5)

tìm(a>0. 5)

khác không (a>0. 5)

tìm các chỉ số trong đó (a > 0. 5)

một(. ,tìm(v>0. 5))

một[. ,khác không(v>0. 5)[0]]

một[. , khác không (v. MỘT>0. 5)[0]]

trích xuất các cột của một trong đó vector v > 0. 5

một(. ,tìm(v>0. 5))

một[. , v. T>0. 5]

một[. , v. T>0. 5)]

trích xuất các cột của cột trong đó vector v > 0. 5

a(a<0. 5)=0

a[a<0. 5]=0

a với các phần tử nhỏ hơn 0. 5 không ra

một. * (a>0. 5)

a * (a>0. 5)

chiếu (một. A * (a>0. 5). MỘT)

a với các phần tử nhỏ hơn 0. 5 không ra

một(. ) = 3

một[. ] = 3

đặt tất cả các giá trị thành cùng một giá trị vô hướng

y=x

y = x. sao chép()

numpy gán theo tham chiếu

y=x(2,. )

y = x[1,. ]. sao chép()

lát numpy là bằng cách tham khảo

y=x(. )

y = x. làm phẳng(1)

biến mảng thành vectơ (lưu ý rằng điều này buộc phải sao chép)

1. 10

sắp xếp(1. ,11. ) hoặc là
r_[1. 11. ] hoặc là
r_[1. 10. 10j]

mat(arange(1. ,11. )) hoặc là
r_[1. 11. ,'r']

tạo một véc tơ tăng dần

0. 9

sắp xếp (10. ) hoặc là
r_[. 10. ] hoặc là
r_[. 9. 10j]

mat (sắp xếp (10. )) hoặc là
r_[. 10. ,'r']

tạo một véc tơ tăng dần

[1. 10]'

sắp xếp(1. ,11. )[. , newaxis]

r_[1. 11. ,'c']

tạo một vectơ cột

số không (3,4)

số không((3,4))

chiếu(. )

Mảng 3x4 hạng 2 chứa đầy các số 0 dấu phẩy động 64 bit

số không (3,4,5)

số không((3,4,5))

chiếu(. )

Mảng 3x4x5 hạng 3 chứa đầy các số 0 dấu phẩy động 64 bit

cái(3,4)

cái((3,4))

chiếu(. )

Mảng 3x4 hạng 2 có đầy đủ các dấu phẩy động 64 bit

mắt(3)

mắt(3)

chiếu(. )

ma trận nhận dạng 3x3

chẩn đoán (a)

chẩn đoán (a)

chiếu(. )

vectơ các phần tử đường chéo của a

chẩn đoán (a,0)

chẩn đoán (a,0)

chiếu(. )

ma trận đường chéo vuông có các giá trị khác không là các phần tử của một

rand(3,4)

ngẫu nhiên. rand(3,4)

chiếu(. )

ma trận 3x4 ngẫu nhiên

không gian trống (1,3,4)

không gian trống (1,3,4)

chiếu(. )

4 mẫu cách đều nhau giữa 1 và 3, bao gồm

[x,y]=lưới lưới(0. 8,0. 5)

mgrid[0. 9. ,0. 6. ] hoặc là
lưới lưới(r_[0. 9. ],r_[0. 6. ]

chiếu(. )

hai mảng 2D. một trong các giá trị x, giá trị còn lại của y

ogrid[0. 9. ,0. 6. ] hoặc là
ix_(r_[0. 9. ],r_[0. 6. ]

chiếu(. )

cách tốt nhất để đánh giá các hàm trên lưới

[x,y]=lưới lưới([1,2,4],[2,4,5])

lưới([1,2,4],[2,4,5])

chiếu(. )

ix_([1,2,4],[2,4,5])

chiếu(. )

cách tốt nhất để đánh giá các hàm trên lưới

repmat(a, m, n)

gạch(a, (m, n))

chiếu(. )

tạo m bởi n bản sao của một

[ab]

nối ((a,b),1) hoặc
hstack((a,b)) hoặc
column_stack((a,b)) hoặc
taxi]

nối ((a,b),1)

nối các cột của a và b

[một;

nối ((a,b)) hoặc
vstack((a,b)) hoặc
r_[a,b]

nối ((a,b))

nối các hàng của a và b

tối đa(tối đa(a))

a. tối đa()

phần tử tối đa của a (với ndims(a)<=2 cho matlab)

tối đa (a)

a. tối đa (0)

phần tử lớn nhất của mỗi cột của ma trận a

tối đa(a,[],2)

a. tối đa(1)

phần tử lớn nhất của mỗi hàng của ma trận a

tối đa(a,b)

tối đa(a, b)

so sánh a và b theo từng phần tử và trả về giá trị lớn nhất từ ​​mỗi cặp

định mức(v)

sqrt(dấu chấm(v,v)) hoặc
Khoa học. linalg. định mức (v) hoặc
linalg. định mức(v)

sqrt(dấu chấm(v. một, v. A)) hoặc
Khoa học. linalg. định mức (v) hoặc
linalg. định mức(v)

L2 chuẩn của véc tơ v

a & b

logic_and(a,b)

toán tử AND theo từng phần tử (Numpy ufunc)

một. b

logic_or(a,b)

toán tử OR theo từng phần tử (Numpy ufunc)

bitand(a,b)

a & b

toán tử AND theo bit (Python bản địa và Numpy ufunc)

bitor(a,b)

một. b

Toán tử OR theo bit (Python bản địa và Numpy ufunc)

vào(a)

linalg. vào(a)

nghịch đảo của ma trận vuông a

pinv(a)

linalg. pinv(a)

giả nghịch đảo của ma trận a

hạng(a)

linalg. matrix_rank(a)

hạng của ma trận a

a\b

linalg. giải (a,b) nếu a là hình vuông
linalg. lstsq(a,b) ngược lại

nghiệm của a x = b với x

ba

Giải quyết một. x. T = b. T thay

nghiệm của x a = b với x

[U,S,V]=svd(a)

U, S, Vh = linalg. svd(a), V = Vh. T

phân rã giá trị đơn lẻ của một

chol(a)

linalg. cholesky(a). T

hệ số cholesky của ma trận (chol(a) trong matlab trả về ma trận tam giác trên, nhưng linalg. cholesky(a) trả về ma trận tam giác thấp hơn)

[V,D]=eig(a)

D,V = linalg. eig(a)

giá trị riêng và vectơ riêng của một

[V,D]=eig(a,b)

V,D = Khoa học. linalg. eig(a,b)

giá trị riêng và vectơ riêng của a, b

[V,D]=eigs(a,k)

tìm k giá trị riêng và vectơ riêng lớn nhất của a

[Q,R,P]=qr(a,0)

Q,R = Khoa học. linalg. qr(a)

chiếu(. )

phân tách QR

[L,U,P]=lu(a)

L,U = Khoa học. linalg. lu(a) hoặc
LU,P=Khoa học. linalg. lu_factor(a)

chiếu(. )

phân hủy LU (chú ý. P(Matlab) == hoán vị(P(numpy)) )

conjgrad

Khoa học. linalg. cg

chiếu(. )

Bộ giải gradient liên hợp

fft(a)

fft(a)

chiếu(. )

Biến đổi Fourier của một

ifft(a)

ifft(a)

chiếu(. )

biến đổi Fourier nghịch đảo của một

sắp xếp (a)

sắp xếp (a) hoặc một. loại()

chiếu(. )

sắp xếp ma trận

[b,I] = sắp xếp(a,i)

Tôi = argsort(a[. ,i]), b=a[I,. ]

sắp xếp các hàng của ma trận

hồi quy(y,X)

linalg. lstsq(X,y)

hồi quy đa tuyến

thập phân(x, q)

Khoa học. dấu hiệu. lấy mẫu lại(x, len(x)/q)

downsample với bộ lọc thông thấp

duy nhất (a)

duy nhất (a)

bóp (a)

a. vắt kiệt()

ma trận con. Việc gán cho một ma trận con có thể được thực hiện với danh sách các chỉ mục bằng cách sử dụng lệnh ix_. e. g. , đối với mảng 2d a, người ta có thể làm. ind=[1,3]; . ix_(ind,ind)]+=100

CỨU GIÚP. Không có tương đương trực tiếp với lệnh which của MATLAB, nhưng các lệnh trợ giúp và nguồn thường sẽ liệt kê tên tệp chứa chức năng. Python cũng có một mô-đun kiểm tra (do import inspect) cung cấp một tệp getfile thường hoạt động

LẬP MỤC. MATLAB® sử dụng một chỉ mục dựa trên một, vì vậy phần tử đầu tiên của chuỗi có chỉ mục 1. Python sử dụng lập chỉ mục dựa trên 0, vì vậy phần tử ban đầu của chuỗi có chỉ mục 0. Nhầm lẫn và chiến tranh lửa phát sinh vì mỗi cái đều có ưu điểm và nhược điểm. Lập chỉ mục dựa trên một phù hợp với cách sử dụng ngôn ngữ phổ biến của con người, trong đó phần tử "đầu tiên" của chuỗi có chỉ mục 1. Lập chỉ mục dựa trên số không đơn giản hóa việc lập chỉ mục. Xem thêm một văn bản của prof. tiến sĩ. Edsger Nữ. Dijkstra

CÁC DÃY. Trong MATLAB®, 0. 5 có thể được sử dụng làm chỉ mục phạm vi chữ và chỉ số 'lát cắt' (nằm trong dấu ngoặc đơn); . 5 chỉ có thể được sử dụng làm chỉ mục lát cắt (bên trong dấu ngoặc vuông). Do đó, đối tượng r_ hơi kỳ quặc đã được tạo để cho phép numpy có cơ chế xây dựng phạm vi ngắn gọn tương tự. Lưu ý rằng r_ không được gọi giống như hàm hoặc hàm tạo, mà được lập chỉ mục bằng cách sử dụng dấu ngoặc vuông, cho phép sử dụng cú pháp lát cắt của Python trong đối số

LOGICOPS. & hoặc là. trong Numpy là bit AND/OR, trong khi ở Matlab & và. logic VÀ/HOẶC. Sự khác biệt phải rõ ràng đối với bất kỳ ai có kinh nghiệm lập trình quan trọng. Cả hai có thể hoạt động giống nhau, nhưng có những khác biệt quan trọng. Nếu bạn đã sử dụng Matlab's & hoặc. toán tử, bạn nên sử dụng Numpy ufuncs logic_and/logical_or. Sự khác biệt đáng chú ý giữa Matlab và Numpy & và. nhà khai thác là

  • Đầu vào {0,1} không logic. Đầu ra của Numpy là bit AND của các đầu vào. Matlab coi mọi giá trị khác 0 là 1 và trả về logic AND. Ví dụ: (3 & 4) trong Numpy là 0, trong khi ở Matlab, cả 3 và 4 đều được coi là logic đúng và (3 & 4) trả về 1

  • Quyền ưu tiên. Toán tử & của Numpy được ưu tiên cao hơn các toán tử logic như < và >;

Nếu bạn biết mình có các đối số boolean, bạn có thể sử dụng các toán tử bitwise của Numpy, nhưng hãy cẩn thận với các dấu ngoặc đơn, như thế này. z = (x > 1) & (x < 2). Việc không có các dạng toán tử Numpy của logic_and và logic_or là một hậu quả đáng tiếc trong thiết kế của Python

ĐỊNH HÌNH LẠI và LẬP CHỈ MỤC TUYẾN TÍNH. Matlab luôn cho phép truy cập các mảng nhiều chiều bằng cách sử dụng các chỉ số vô hướng hoặc tuyến tính, Numpy thì không. Các chỉ số tuyến tính phổ biến trong các chương trình Matlab, e. g. find() trên ma trận trả về chúng, trong khi tìm thấy của Numpy hoạt động khác. Khi chuyển đổi mã Matlab, trước tiên có thể cần định hình lại ma trận thành chuỗi tuyến tính, thực hiện một số thao tác lập chỉ mục và sau đó định hình lại. Khi định hình lại (thường) tạo ra các chế độ xem trên cùng một bộ lưu trữ, nên có thể thực hiện việc này khá hiệu quả. Lưu ý rằng thứ tự quét được sử dụng bởi định hình lại trong Numpy mặc định là thứ tự 'C', trong khi Matlab sử dụng thứ tự Fortran. Nếu bạn chỉ đơn giản là chuyển đổi sang một chuỗi tuyến tính và ngược lại thì điều này không thành vấn đề. Nhưng nếu bạn đang chuyển đổi định dạng lại từ mã Matlab dựa trên thứ tự quét, thì mã Matlab này. z = định hình lại(x,3,4); . định hình lại(3,4,order='F'). sao chép () trong Numpy

Trong MATLAB®, công cụ chính có sẵn cho bạn để tùy chỉnh môi trường là sửa đổi đường dẫn tìm kiếm với vị trí của các chức năng yêu thích của bạn. Bạn có thể đưa các tùy chỉnh đó vào tập lệnh khởi động mà MATLAB sẽ chạy khi khởi động

NumPy, hay đúng hơn là Python, có các cơ sở tương tự

  • Để sửa đổi đường dẫn tìm kiếm Python của bạn để bao gồm các vị trí của các mô-đun của riêng bạn, hãy xác định biến môi trường PYTHONPATH

  • Để thực thi một tệp tập lệnh cụ thể khi trình thông dịch Python tương tác được khởi động, hãy xác định biến môi trường PYTHONSTARTUP để chứa tên tập lệnh khởi động của bạn

Không giống như MATLAB®, nơi mọi thứ trên đường dẫn của bạn có thể được gọi ngay lập tức, với Python, trước tiên bạn cần thực hiện câu lệnh 'nhập' để có thể truy cập các hàm trong một tệp cụ thể

Ví dụ: bạn có thể tạo tập lệnh khởi động giống như thế này (Lưu ý. đây chỉ là một ví dụ, không phải là tuyên bố về "các phương pháp hay nhất")

  • âm mưu. matplotlib cung cấp giao diện tương tự để vẽ đồ thị 2D;

  • tính tượng trưng. swiginac dường như là tùy chọn hiện tại đầy đủ nhất. sympy là một dự án nhằm đưa các chức năng tính toán ký hiệu cơ bản vào Python. Cũng cần lưu ý là PyDSTool cung cấp một số chức năng tượng trưng cơ bản

  • Đại số tuyến tính. scipy. linalg cung cấp các thủ tục LAPACK

  • nội suy. [/ScipyPackages/Nội suy scipy. nội suy] cung cấp một số công cụ nội suy spline

  • Hội nhập số. scipy. tích hợp cung cấp một số công cụ để tích hợp các chức năng cũng như một số bộ tích hợp ODE cơ bản. Tự động chuyển đổi thông số kỹ thuật trường vectơ XML bằng VFGEN

  • hệ thống động lực. PyDSTool cung cấp gói mô hình hóa và hệ thống động lớn, bao gồm các bộ tích hợp ODE/DAE tốt. Tự động chuyển đổi thông số kỹ thuật trường vectơ XML bằng VFGEN

  • simulink. hiện tại không có sự thay thế nào

xem http. // toán học. sf. net/ để tham khảo chéo MATLAB®/NumPy khác

xem http. //urapiv. báo chí. com cho một dự án mã nguồn mở (URAPIV) cố gắng chuyển từ MATLAB® sang Python (PyPIV http. //nguồnforge. net/projects/pypiv) với SciPy/NumPy

Để tạo một môi trường lập trình tương tự như môi trường được trình bày bởi MATLAB®, những điều sau đây rất hữu ích

  • IPython. một môi trường tương tác với nhiều tính năng hướng đến công việc hiệu quả trong cách sử dụng khoa học điển hình rất giống (với một số cải tiến) với bảng điều khiển MATLAB®

  • Matplotlib. một gói vẽ đồ thị 2D với một danh sách các lệnh tương tự như các lệnh được tìm thấy trong MATLAB. Matplotlib được tích hợp rất tốt với IPython

  • Spyder một môi trường phát triển Python mã nguồn mở và miễn phí cung cấp giao diện và trải nghiệm giống như MATLAB®

  • SPE là một IDE miễn phí tốt cho python. Có lời nhắc tương tác

  • nhật thực. là một tùy chọn hay để chỉnh sửa mã python thông qua plugin pydev

  • cánh IDE. một IDE thương mại có sẵn cho nhiều nền tảng. Phiên bản chuyên nghiệp có lời nhắc gỡ lỗi tương tác tương tự như MATLAB's

  • Phần mềm phát triển khoa học và kỹ thuật Python(x,y) để tính toán số, phân tích dữ liệu và trực quan hóa dữ liệu. Quá trình cài đặt bao gồm, trong số những thứ khác, Spyder, Eclipse và rất nhiều mô-đun Python có liên quan để tính toán khoa học

  • Công cụ Python cho Visual Studio. một plugin IDE phong phú cho Visual Studio hỗ trợ CPython, IronPython, IPython REPL, Gỡ lỗi, Cấu hình, bao gồm chạy chương trình MPI gỡ lỗi trên các cụm HPC

Một danh sách đầy đủ các công cụ cho công việc khoa học với python có trong liên kết. Topical_Software


  • MATLAB® và SimuLink® là thương hiệu đã đăng ký của The MathWorks


Thể loạiCookbook CategoryTemplate CategoryTemplate CategorySách dạy nấu ănSciPyPackages CategoryCategory

Làm cách nào để sử dụng MATLAB với Python?

Khởi động Công cụ MATLAB cho Python .
Khởi động Python® tại dấu nhắc của hệ điều hành
nhập matlab. gói công cụ vào phiên Python của bạn
Bắt đầu một quy trình MATLAB® mới bằng cách gọi start_matlab. Hàm start_matlab trả về một đối tượng Python eng cho phép bạn truyền dữ liệu và gọi các hàm do MATLAB thực thi

Làm cách nào để sử dụng NumPy trong MATLAB?

Liên kết trực tiếp tới câu trả lời này .
Mở lời nhắc Anaconda (đi kèm với gói). .
Thay đổi thư mục thành thư mục chứa tệp thực thi matlab. .
Chạy matlab bằng cách chỉ chạy lệnh "matlab" trong dấu nhắc
Xác minh bằng cách sử dụng một cái gì đó như "py

NumPy có giống với MATLAB không?

Mảng NumPy tương đương với cấu trúc dữ liệu mảng cơ bản trong MATLAB . Với mảng NumPy, bạn có thể thực hiện những việc như tích bên trong và bên ngoài, chuyển vị và các phép toán theo phần tử.

NumPy hay MATLAB cái nào nhanh hơn?

Trong Python X += Y; . Tuy nhiên, trong MATLAB trên máy của tôi X = X + 2*Y nhanh hơn một chút so với X = X + Y + Y. . Điểm chính xác