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

كيف أحوّل مصفوفة NumPy إلى قائمة في بايثون؟

MaxReve

السؤال

Recommended Posts

  • 0

لدي مصفوفات NumPy تابع tolist() لتحويل مصفوفة NumPy إلى قائمة في لغة بايثون، هذا هو تعريفها من التوثيق الرسمي:

يُرجع هذا التابع نسخة من بيانات المصفوفة كقائمة بايثون (متداخلة)،و إن عناصر البيانات يتم تحويلها إلى أقرب متوافق من أنواع بايثون.

وكمثال بسيط على استخدام هذا التابع لنستعمله في تحويل المثال الذي ذكرته في سؤالك كما في المثال التالي:

import numpy as np
>>> np.array([[1,2,3],[4,5,6]]).tolist()
[[1, 2, 3], [4, 5, 6]]

لاحظ أننا حوّلنا إلى مصفوفة Numpy ومن ثم حولناه إلى قائمة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكنك أيضًا استخدام الدالة المُضمنة في بايثون list.
مثال1: تحويل مصفوفة أحادية البعد إلى قائمة:

import numpy as np
# مصفوفة أحادية
arr = np.array([1,2,3,4])
# طياعتها
print("Numpy array: ", arr)
# طباعة نوعها
print("Type: ",type(arr))
# تحويلها لقائمة
ls = list(arr)
print("\nList: ", ls)
print("Type: ",type(ls))

الخرج:

Numpy array:  [1 2 3 4]
Type:  <class 'numpy.ndarray'>
List:  [1, 2, 3, 4]
Type:  <class 'list'>

مثال2: تحويل مصفوفة ثنائية إلى قائمة:

import numpy as np
# تعريف مصفوفة
arr = np.array([[1,2,3],[4,5,6]])
# طباعتها
print("Numpy array: ", arr)
# طباعة نوعها
print("Type: ",type(arr))
# تحويلها لقائمة
ls = list(arr)
print("\nList: ", ls)
print("Type: ",type(ls))

الخرج:

Numpy array:  [[1 2 3]
 [4 5 6]]
Type:  <class 'numpy.ndarray'>
List:  [array([1, 2, 3]), array([4, 5, 6])]
Type:  <class 'list'>


كما يمكنك استخدام الدالة tolist، كما في الإجابة السابقة، لكن هناك فرق بين الدالتين يتجلى في حالة المصفوفات متعددة الأبعاد، فلو استخدمنا الدالة tolist مع المصفوفة الثنائية السابقة، سيكون الخرج كالتالي:

Numpy array:  [[1 2 3]
 [4 5 6]]
Type:  <class 'numpy.ndarray'>
List:  [[1, 2, 3], [4, 5, 6]]
Type:  <class 'list'>

لاحظ أن هناك اختلاف في شكل الخرج بين الدالتين، لكن هناك اختلاف آخر، فباستخدام الدالة tolist، يتم تحويل عناصر البيانات إلى أقرب أنواع بايثون المضمنة المتوافقة معها، بينما يتم الاحتفاظ بأنواع عناصر البيانات عند استخدام list. انظر إلى المثال التالي:

import numpy as np
arr = np.array([1,2,3,4])
ls1 = arr.tolist()
ls2 = list(arr)
print("ls1: ", ls1)
print("Type of items: ",[type(i) for i in ls1])
print("\nls2: ", ls2)
print("Type of items: ",[type(i) for i in ls2])

الخرج:

ls1:  [1, 2, 3, 4]
Type of items:  [<class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>]

ls2:  [1, 2, 3, 4]
Type of items:  [<class 'numpy.int32'>, <class 'numpy.int32'>, <class 'numpy.int32'>, <class 'numpy.int32'>]

لاحظ أنه في القائمة التي تم إرجاعها بواسطة دالة tolist، تم تحويل كل عنصر إلى أقرب نوع بيانات متوافق معه، بينما في القائمة التي تم إرجاعها بواسطة list، يحتفظ كل عنصر بنوعه. وهذا فرق مهم جدًا في بعض الحالات.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...