يُعد NumPy حجر الزاوية في الحوسبة العلمية في Python، وتكمن قوته إلى حد كبير في كائن المصفوفة متعددة الأبعاد، ndarray. إن إتقان ndarrays أمر ضروري للاستخدام الفعال لـ NumPy. يقدم هذا البرنامج التعليمي مقدمة شاملة لـ ndarrays، تغطي إنشائها وسماتها وعملياتها الأساسية.
جدول المحتويات
تعريف Ndarray
مصفوفة NumPy ndarray (مصفوفة متعددة الأبعاد) هي حاوية متجانسة متعددة الأبعاد تحتوي على عناصر من نفس النوع والحجم. اعتبرها نسخة مُحسّنة للغاية ومتطورة من قائمة Python، قادرة على التعامل مع البيانات عبر أبعاد متعددة (1D، 2D، 3D، وأعلى). على عكس قوائم Python، التي يمكن أن تحتوي على عناصر من أنواع بيانات مختلفة، فإن ndarrays تفرض تجانس النوع، مما يؤدي إلى مكاسب كبيرة في الأداء. يسمح هذا التجانس بالعمليات المتجهة – تطبيق العمليات على المصفوفة بأكملها في وقت واحد بدلاً من عنصر عنصر، مما يحسن السرعة بشكل كبير.
الخصائص الرئيسية لـ ndarray:
- متجانسة: جميع العناصر تشترك في نفس نوع البيانات.
- متعددة الأبعاد: تمثل البيانات في أبعاد مختلفة (متجهات 1D، مصفوفات 2D، موترات 3D، إلخ).
- حجم ثابت: يتم تحديد حجم المصفوفة عند إنشائها، وعادةً ما ينطوي تغيير الحجم على إنشاء مصفوفة جديدة.
- عمليات متجهة: تدعم عمليات فعالة على مستوى العنصر وعلى مستوى المصفوفة.
- كفاءة الذاكرة: تخزن البيانات في كتل ذاكرة متجاورة، مما يعزز الأداء.
إنشاء Ndarray
إنشاء ndarrays أمر بسيط باستخدام دوال NumPy:
import numpy as np
# من قائمة
arr_1d = np.array([1, 2, 3, 4, 5])
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
# باستخدام دوال متخصصة
arr_zeros = np.zeros((2, 3)) # مصفوفة من الأصفار
arr_ones = np.ones((3, 2)) # مصفوفة من الواحدات
arr_arange = np.arange(10) # تسلسل من الأرقام
arr_linspace = np.linspace(0, 1, 5) # أرقام متباعدة بالتساوي
arr_random = np.random.rand(2, 2) # أرقام عشوائية
print(arr_1d)
print(arr_2d)
print(arr_zeros)
print(arr_ones)
print(arr_arange)
print(arr_linspace)
print(arr_random)
سمات Ndarray
توفر كائنات Ndarray العديد من السمات المهمة التي تقدم معلومات حول شكلها، ونوع البيانات، وحجمها، وأكثر من ذلك. إن فهم هذه السمات هو مفتاح التلاعب الفعال بـ ndarray.
ndim
: عدد أبعاد المصفوفة (المحاور).shape
: مجموعة تُشير إلى حجم المصفوفة على طول كل بعد (مثلًا، (3، 4) لمصفوفة 3×4).size
: العدد الإجمالي للعناصر.dtype
: نوع بيانات العناصر (مثلًا،int32
،float64
،bool
).itemsize
: حجم (بالبايت) كل عنصر.nbytes
: الحجم الإجمالي (بالبايت) للمصفوفة (itemsize * size
).
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("عدد الأبعاد:", arr.ndim)
print("الشكل:", arr.shape)
print("الحجم:", arr.size)
print("نوع البيانات:", arr.dtype)
print("حجم العنصر:", arr.itemsize)
print("البايت الإجمالي:", arr.nbytes)
عمليات Ndarray الأساسية
يوفر NumPy عمليات فعالة على مستوى العنصر وعلى مستوى المصفوفة. العمليات الحسابية البسيطة (+، -، *، /، //، %، **) متجهة:
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print("الجمع:", arr1 + arr2)
print("الطرح:", arr1 - arr2)
print("الضرب:", arr1 * arr2)
print("القسمة:", arr1 / arr2)
تتوفر أيضًا عمليات أكثر تقدمًا (مثل ضرب المصفوفات، والنتيجة القياسية، وما إلى ذلك).