Numpy matrisleri kesinlikle 2 boyutlu iken numpy dizileri (ndarrays) N-boyutludur. Matris nesneleri bir ndarray alt sınıfıdır, bu nedenle ndarrayların tüm niteliklerini ve yöntemlerini devralırlar.
Numpy matrislerin ana avantajı, matris çarpımı için uygun bir gösterim sağlamalarıdır: a ve b matris a*b
ise, matris ürünüdür.
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]]
Öte yandan, Python 3.5'ten itibaren, NumPy @
operatörü kullanarak infix matris çarpımını destekler , böylece Python> = 3.5'de ndarraylarla aynı matris çarpma rahatlığını elde edebilirsiniz.
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]]
Hem matris nesneleri hem de ndarray'ların .T
aktarımı döndürmesi gerekir, ancak matris nesnelerinin de .H
konjugat aktarımı için olması gerekir ve.I
tersi için de vardır.
Buna karşılık, numpy dizileri, işlemlerin eleman olarak uygulandığı kuralına (yeni @
operatör hariç ) tutarlı bir şekilde uyar . Böylece, a
ve b
numpy diziler, o zaman a*b
öğeye bileşenleri çarpılmasıyla oluşturulan dizidir:
c = np.array([[4, 3], [2, 1]])
d = np.array([[1, 2], [3, 4]])
print(c*d)
# [[4 6]
# [6 4]]
Matris çarpımının sonucunu elde etmek için kullanın np.dot
(veya @
yukarıda gösterildiği gibi Python> = 3.5'te):
print(np.dot(c,d))
# [[13 20]
# [ 5 8]]
**
Operatör aynı zamanda farklı davranır:
print(a**2)
# [[22 15]
# [10 7]]
print(c**2)
# [[16 9]
# [ 4 1]]
Bu yana a
bir matris, a**2
matris ürün verir a*a
. Bu yana c
bir ndarray olup, c**2
her bir bileşen kare öğeye sahip bir ndarray döndürür.
Matris nesneleri ve ndarrays arasında başka teknik farklılıklar da vardır ( np.ravel
öğe seçimi ve sıra davranışı ile ilgili).
Numpy dizilerin ana avantajı, 2 boyutlu matrislerden daha genel olmalarıdır . 3 boyutlu bir dizi istediğinizde ne olur? O zaman bir matris nesnesi değil, bir ndarray kullanmalısınız. Bu nedenle, matris nesnelerini kullanmayı öğrenmek daha fazla iştir - matris nesne işlemlerini ve ndarray işlemlerini öğrenmeniz gerekir.
Hem matrisleri hem de dizileri karıştıran bir program yazmak hayatınızı zorlaştırır, çünkü değişkenlerinizin ne tür bir nesne olduğunu takip etmek zorunda kalırsanız, çarpma beklemediğiniz bir şeyi döndürür.
Buna karşılık, sadece ndarrays ile yapışırsanız, matris nesnelerinin yapabileceği her şeyi ve daha fazlasını yapabilirsiniz, ancak biraz farklı işlevler / gösterimler hariç.
NumPy matris ürün notasyonunun görsel cazibesinden vazgeçmek istiyorsanız (Python> = 3.5'teki ndarraylarla neredeyse zarif bir şekilde elde edilebilir), o zaman NumPy dizilerinin kesinlikle gitmenin yolu olduğunu düşünüyorum.
PS. Tabii ki, gerçekten diğerinin pahasına birini seçmek zorunda değilsiniz, çünkü np.asmatrix
ve diğerini np.asarray
dönüştürmenize izin verir (dizi 2 boyutlu olduğu sürece).
Numpy arasındaki farkların bir özeti vardır arrays
NumPy vs matrix
es burada .