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*badalah 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 .Tmengembalikan transpos, tetapi objek matriks juga memiliki .Htranspos konjugat, dan .Iuntuk invers.
Sebaliknya, numpy array secara konsisten mematuhi aturan bahwa operasi diterapkan berdasarkan elemen (kecuali untuk @operator baru ). Dengan demikian, jika adan barray numpy, maka a*barray 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 amerupakan matriks, a**2kembalikan produk matriks a*a. Karena cmerupakan ndarray, c**2mengembalikan 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.asmatrixdan np.asarraymemungkinkan Anda untuk mengkonversi satu ke yang lain (selama array 2-dimensi).
Ada sinopsis dari perbedaan antara NumPy arraysvs NumPy matrixes di sini .