اذهب إلى المحتوى

السؤال

نشر

ما هي مزايا وعيوب كل منهما؟

من خلال ما رأيته ، يمكن أن يعمل أحدهما كبديل للآخر إذا لزم الأمر ، فهل يجب أن استخدام كليهما أم يجب أن ألتزم بواحد منهما فقط؟

هل سيؤثر أداء البرنامج على اختياري؟ أقوم ببعض التعلم الآلي machine learning باستخدام numpy ، لذلك هناك بالفعل الكثير من المصفوفات matrices، ولكن أيضًا الكثير من المتجهات  vectors  (المصفوفات arrays).

import numpy as np
mat = np.mat('4 3; 2 1')
arr = np.array([[4, 3], [2, 1]])

 

Recommended Posts

  • 1
نشر

تعرف ال matrix والتي جمعها matrices على انها المصفوفة ثنائية الأبعاد، والتي التي تحتوي على صفوف وأعمدة فقط، أنظر المثال التالي:

>>> import numpy as np
>>> a = np.array([[2,3], [4,5]])
>>> 
>>> y = np.asmatrix(a)
>>> 
>>> a[0,0] = 5
>>> 
>>> y
matrix([[5, 3],
        [4, 5]])

أما عن np.array فهي شكل اكثر شمولا عن np.mat، حيث أنها لا تقف فقط عند المصفوفات ثنائية الأبعاد وانما تدعم كل ألابعاد N-dimensional.

np.array([[1, 2], [3, 4]])
array([[1, 2],
       [3, 4]])

كما انها أسهل في التعامل وتوفر أمكانيات اكثر للتعامل مع المصفوفات، في الكود التالي بعض العمليات التي توفرها numpy.array

import numpy
# Two matrices are initialized by value
x = numpy.array([[1, 2], [4, 5]])
y = numpy.array([[7, 8], [9, 10]])
#  جمع مصفوفتين
print ("Addition of two matrices: ")
print (numpy.add(x,y))
# subtract()طرح مصفوفتين
print ("Subtraction of two matrices : ")
print (numpy.subtract(x,y))
# divide()قسمة مصفوفتين
print ("Matrix Division : ")
print (numpy.divide(x,y))
print ("Multiplication of two matrices: ")
print (numpy.multiply(x,y))
print ("The product of two matrices : ")
print (numpy.dot(x,y))
print ("square root is : ")
print (numpy.sqrt(x))
print ("The summation of elements : ")
print (numpy.sum(y))
print ("The column wise summation  : ")
print (numpy.sum(y,axis=0))
print ("The row wise summation: ")
print (numpy.sum(y,axis=1))
# using "T" عكس المصفوفة
print ("Matrix transposition : ")
print (x.T)

ويكون الخرج كالتالي:

Addition of two matrices: 
[[ 8 10]
 [13 15]]
Subtraction of two matrices :
[[-6 -6]
 [-5 -5]]
Matrix Division :
[[0.14285714 0.25      ]
 [0.44444444 0.5       ]]
Multiplication of two matrices: 
[[ 7 16]
 [36 50]]
The product of two matrices :
[[25 28]
 [73 82]]
square root is :
[[1.         1.41421356]
 [2.         2.23606798]]
The summation of elements :
34
The column wise summation  :
[16 18]
The row wise summation: 
[15 19]
Matrix transposition :
[[1 4]
[2 5]]

 

  • 1
نشر (معدل)

تكون Numpy matrices ثنائية الأبعاد حصراً، بينما تكون المصفوفات المعقدة (ndarrays)  أي ذات N أبعاد. وكائنات Matrix هي صف فرعي من ndarray ، لذلك فهي ترث جميع ال attributes والتوابع من ndarrays. إن الميزة الرئيسية ل Numpy matrices أنها توفر طريقة مريحة لضرب المصفوفات، أما بالنسبة لمصفوفات نمباي فإنه بدءاً من Python 3.5 أصبحت نمباي تدعم ضرب المصفوفات بطريقة مريحة عن طريق استخدام المعامل "@"، انظر:

import numpy as np
x = np.mat('2 2; 0 3')
print(x)
"""
[[2 2]
 [0 3]]
"""
y = np.mat('4 1; 4 2')
print(y)
"""
[[4 1]
 [4 2]]
"""
print(x*y)
"""
[[16  6]
 [12  6]]
"""
#ndarray استخدام  نمباي 
import numpy as np
x = np.array([[2,2], [0 ,3]])
print(x)
"""
[[2 2]
 [0 3]]
"""
y = np.array([[4, 1], [4, 2]])
print(y)
"""
[[4 1]
 [4 2]]
"""
print(x@y)  # print(np.dot(x,y)) أو
"""
[[16  6]
 [12  6]]
"""

أيضاً كلاهما يدعمان العامل .T لحساب منقول المصفوفة "transpose" لكن كائنات mat لديها ميزات إضافية مثل حساب معكوس مصفوفة وال Conjugate transpose,

x = np.array([[2,2], [0 ,3]])
a = np.mat('4 3; 2 1')
print(x.T)
print(a.T)
print(a.H) #mat خاصة ب  # Conjugate transpose
print(a.I) #mat خاصة ب  # inverse
"""
[[2 0]
 [2 3]]
[[4 2]
 [3 1]]
[[4 2]
 [3 1]]
[[-0.5  1.5]
 [ 1.  -2. ]]

"""

ومن ناحية استخدام العامل ** :

# nd
a = np.array([[4, 3], [2, 1]])
c = np.array([[4, 3], [2, 1]])
print(a@b)
"""[[13 20]
 [ 5  8]]"""

print(a**2)
"""[[16  9]
 [ 4  1]]"""
print(c**2)
"""
[[16  9]
 [ 4  1]]
"""
#matrix
a = np.mat('4 3; 2 1')
a**a
"""
[[16  9]
 [ 4  1]]
"""

هناك توابع أخرى مثل np.ravel لكنها غير مهمة. الميزة الرئيسية للمصفوفات matrix هي أنها أكثر عمومية من المصفوفات ثنائية الأبعاد. لكن عليك استخدام ndarray في حالة كانت البيانات ثلاثية الأبعاد أو أكثر، وليس كائن matrix.وطبعاً قد يكون المزج بينهما خلال بناء الكود فكرة سيئة أو متعبة لأنه يجب عليك ملاحقة المتغيرات والتدقيق منهم لكي لايعيد لك ناتج الضرب نتيجة غير متوقعة. وبشكل عام يمكنك الاعتماد كلياً على ndarray  لكنك ستفقد بعض التوابع أو ال notation الموجودة في mat وغير الموجودة في nd. وأخيراً يمكنك التحويل بينهما من خلال np.asarray و np.asmatrix:

# ndarrays
a = np.array([[4, 3], [2, 1]])
np.asmatrix (a)
"""
matrix([[4, 3],
        [2, 1]])
"""

 

تم التعديل في بواسطة Ali Haidar Ahmad
  • 0
نشر

حسب التوثيق الرسمي، سيتم حذف matrices في الإصدارات التالية من Numpy : الرابط: numpy.matrix.html

بالأصل، matrices محدودة كمصفوفة ثنائية الأبعاد 2-dimensional، أما array فهي تدعم مصفوفات متعددة الأبعاد N-dimensional..

كانت أفضلية np.mat هي في تحقيق جداء المصفوفات، ولكنه أصبح متاحا بعد تحديث python +3.5 و numpy +1.10

حيث أصبح يمكن عمل جداء مصفوفات باستخدم A @ B

a = np.array([[4, 3], [2, 1]])
b = np.array([[1, 2], [3, 4]])
print(a@b)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...