Matriks numpy benar-benar 2 dimensi, sedangkan numpy array (ndarrays) adalah N-dimensional. Objek matriks adalah subkelas dari ndarray, sehingga mereka mewarisi semua atribut dan metode ndarray.
Keuntungan utama dari matriks numpy adalah bahwa mereka memberikan notasi yang nyaman untuk perkalian matriks: jika a dan b adalah matriks, maka a*b
adalah produk matriks mereka.
import numpy as np
a = np.mat('4 3; 2 1')
b = np.mat('1 2; 3 4')
print(a)
# [[4 3]
# [2 1]]
print(b)
# [[1 2]
# [3 4]]
print(a*b)
# [[13 20]
# [ 5 8]]
Di sisi lain, pada Python 3.5, NumPy mendukung perkalian matriks infiks menggunakan @
operator, sehingga Anda dapat mencapai kenyamanan yang sama dari perkalian matriks dengan ndarrays di Python> = 3.5.
import numpy as np
a = np.array([[4, 3], [2, 1]])
b = np.array([[1, 2], [3, 4]])
print(a@b)
# [[13 20]
# [ 5 8]]
Objek matriks dan ndarrays harus .T
mengembalikan transpos, tetapi objek matriks juga memiliki .H
transpos konjugat, dan .I
untuk invers.
Sebaliknya, numpy array secara konsisten mematuhi aturan bahwa operasi diterapkan berdasarkan elemen (kecuali untuk @
operator baru ). Dengan demikian, jika a
dan b
array numpy, maka a*b
array dibentuk dengan mengalikan elemen-elemen komponen:
c = np.array([[4, 3], [2, 1]])
d = np.array([[1, 2], [3, 4]])
print(c*d)
# [[4 6]
# [6 4]]
Untuk mendapatkan hasil perkalian matriks, Anda menggunakan np.dot
(atau @
dengan Python> = 3.5, seperti yang ditunjukkan di atas):
print(np.dot(c,d))
# [[13 20]
# [ 5 8]]
The **
Operator juga berperilaku berbeda:
print(a**2)
# [[22 15]
# [10 7]]
print(c**2)
# [[16 9]
# [ 4 1]]
Karena a
merupakan matriks, a**2
kembalikan produk matriks a*a
. Karena c
merupakan ndarray, c**2
mengembalikan ndarray dengan setiap komponen yang dikuadratkan dengan elemen.
Ada perbedaan teknis lainnya antara objek matriks dan ndarrays (berkaitan dengan np.ravel
, pemilihan item dan perilaku urutan).
Keuntungan utama dari array numpy adalah bahwa mereka lebih umum daripada matriks 2 dimensi . Apa yang terjadi ketika Anda menginginkan array 3 dimensi? Maka Anda harus menggunakan ndarray, bukan objek matriks. Dengan demikian, belajar menggunakan objek matriks lebih banyak pekerjaan - Anda harus belajar operasi objek matriks, dan operasi ndarray.
Menulis program yang menggabungkan matriks dan array membuat hidup Anda sulit karena Anda harus melacak jenis objek variabel Anda, jangan sampai perkalian mengembalikan sesuatu yang tidak Anda harapkan.
Sebaliknya, jika Anda hanya menggunakan ndarrays, maka Anda dapat melakukan semua yang dapat dilakukan objek matriks, dan lebih banyak lagi, kecuali dengan fungsi / notasi yang sedikit berbeda.
Jika Anda bersedia untuk melepaskan daya tarik visual dari notasi produk NumPy matrix (yang dapat dicapai hampir sama anggunnya dengan ndarrays dengan Python> = 3.5), maka saya pikir array NumPy jelas merupakan cara yang harus dilakukan.
PS. Tentu saja, Anda benar-benar tidak harus memilih satu dengan mengorbankan yang lain, karena np.asmatrix
dan np.asarray
memungkinkan Anda untuk mengkonversi satu ke yang lain (selama array 2-dimensi).
Ada sinopsis dari perbedaan antara NumPy arrays
vs NumPy matrix
es di sini .