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*bise, 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 .Taktarımı döndürmesi gerekir, ancak matris nesnelerinin de .Hkonjugat 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, ave bnumpy 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 abir matris, a**2matris ürün verir a*a. Bu yana cbir ndarray olup, c**2her 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.asmatrixve diğerini np.asarraydönüştürmenize izin verir (dizi 2 boyutlu olduğu sürece).
Numpy arasındaki farkların bir özeti vardır arraysNumPy vs matrixes burada .