Python برنامج NumPy التعليمي للمبتدئين: تعلم باستخدام الأمثلة

ما هو NumPy في Python?

نمباي هي مكتبة مفتوحة المصدر متوفرة في Python، والتي تساعد في البرمجة الرياضية والعلمية والهندسية وعلوم البيانات. وهي مكتبة مفيدة جدًا لإجراء العمليات الحسابية والإحصائية في Python. إنه يعمل بشكل مثالي للمصفوفات متعددة الأبعاد وضرب المصفوفات. من السهل التكامل مع C/C++ Fortran.

بالنسبة لأي مشروع علمي، فإن NumPy هي الأداة التي يجب معرفتها. لقد تم تصميمه للعمل مع المصفوفة ذات الأبعاد N، والجبر الخطي، والرقم العشوائي، وتحويل فورييه، وما إلى ذلك.

NumPy هي لغة برمجة تتعامل مع المصفوفات والمصفوفات متعددة الأبعاد. بالإضافة إلى المصفوفات والمصفوفات، تدعم NumPy عددًا كبيرًا من العمليات الحسابية. في هذا الجزء، سنراجع الوظائف الأساسية التي تحتاج إلى معرفتها للبرنامج التعليمي حول 'TensorFlow".

لماذا نستخدم NumPy؟

NumPy هو كفاءة الذاكرة، مما يعني أنه يمكنه التعامل مع كمية هائلة من البيانات التي يمكن الوصول إليها أكثر من أي مكتبة أخرى. علاوة على ذلك، فإن NumPy مناسب جدًا للعمل معه، خاصة فيما يتعلق بضرب المصفوفات وإعادة تشكيلها. علاوة على ذلك، فإن NumPy سريع. في الواقع، يتعلم TensorFlow وScikit استخدام مصفوفة NumPy لحساب ضرب المصفوفة في النهاية الخلفية.

كيفية تثبيت NumPy

لتثبيت مكتبة NumPy، يرجى الرجوع إلى البرنامج التعليمي الخاص بنا كيفية تثبيت TensorFlow. يتم تثبيت NumPy افتراضيًا مع Anaconda.

في الحالة البعيدة، لم يتم تثبيت NumPy-

يمكنك تثبيت NumPy باستخدام Anaconda:

conda install -c anaconda numpy
  • In Jupyter دفتر :
import sys
!conda install --yes --prefix {sys.prefix} numpy

قم باستيراد NumPy والتحقق من الإصدار

أمر استيراد numpy هو:

import numpy as np

يعيد الكود أعلاه تسمية مساحة الاسم Numpy إلى np. يسمح لنا هذا ببادئة الدالة والأساليب والسمات Numpy بـ "np" بدلاً من كتابة "numpy". هذا هو الاختصار القياسي الذي ستجده في الأدبيات المبتذلة

للتحقق من الإصدار المثبت لديك من NumPy، استخدم الأمر أدناه:

print (np.__version__)

الإخراج:

1.18.0

ما هي تفاصيل Python صفيف NumPy؟

صفائف NumPy تشبه إلى حد ما Python القوائم، ولكن لا تزال مختلفة كثيرا في نفس الوقت. بالنسبة لأولئك منكم الجدد في هذا الموضوع، دعونا نوضح ما هو بالضبط وما فائدته.

نظرًا لأن الاسم يظهر، فإن مصفوفة NumPy هي بنية بيانات مركزية لمكتبة numpy. اسم المكتبة هو في الواقع اختصار لـ "Numeric Python" أو "رقمي Python".

إنشاء مصفوفة NumPy

إن أبسط طريقة لإنشاء مصفوفة في Numpy هي استخدامها Python قائمة

myPythonList = [1,9,8,3]

لتحويل قائمة بايثون إلى مصفوفة numpy باستخدام الكائن np.array.

numpy_array_from_list = np.array(myPythonList)

لعرض محتويات القائمة

numpy_array_from_list

الإخراج:

array([1, 9, 8, 3])

في الممارسة العملية، ليست هناك حاجة للإعلان عن Python قائمة. يمكن دمج العملية.

a  = np.array([1,9,8,3])

نوت: تنص وثائق Numpy على استخدام np.ndarray لإنشاء مصفوفة. ومع ذلك، هذه هي الطريقة الموصى بها.

يمكنك أيضًا إنشاء مصفوفة numpy من Tuple.

رياضي Operations على صفيف

يمكنك إجراء عمليات حسابية مثل الجمع والطرح والقسمة والضرب على مصفوفة. يتكون بناء الجملة من اسم المصفوفة متبوعًا بالعملية (+.-,*,/) متبوعًا بالمتغير

على سبيل المثال:

numpy_array_from_list + 10

الإخراج:

array([11, 19, 18, 13])

تضيف هذه العملية 10 إلى كل عنصر من عناصر مجموعة numpy.

شكل المصفوفة

يمكنك التحقق من شكل المصفوفة من خلال شكل الكائن المسبوق باسم المصفوفة. بنفس الطريقة، يمكنك التحقق من النوع باستخدام dtypes.

import numpy as np
a  = np.array([1,2,3])
print(a.shape)
print(a.dtype)

(3,)
int64

العدد الصحيح هو قيمة بدون علامة عشرية. إذا قمت بإنشاء مصفوفة ذات علامة عشرية، فسيتغير النوع إلى عدد عشري.

#### Different type
b  = np.array([1.1,2.0,3.2])
print(b.dtype)

float64

2 مصفوفة البعد

يمكنك إضافة بُعد باستخدام غيبوبة "".

لاحظ أنه يجب أن يكون ضمن القوس []

### 2 dimension
c = np.array([(1,2,3),
              (4,5,6)])
print(c.shape)
(2, 3)

3 مصفوفة البعد

يمكن بناء البعد الأعلى على النحو التالي:

### 3 dimension
d = np.array([
    [[1, 2,3],
        [4, 5, 6]],
    [[7, 8,9],
        [10, 11, 12]]
])
print(d.shape)
(2, 2, 3)
الهدف رمز
إنشاء مصفوفة صفيف([1,2,3])
طباعة الشكل صفيف ([.]).الشكل

ما هو numpy.zeros()؟

numpy.zeros () أو np.zeros Python يتم استخدام الدالة لإنشاء مصفوفة مليئة بالأصفار. numpy.zeros() في Python يمكن استخدامه عند تهيئة الأوزان أثناء التكرار الأول في TensorFlow والمهام الإحصائية الأخرى.

numpy.zeros() بناء جملة الدالة

numpy.zeros(shape, dtype=float, order='C')

Python numpy.zeros() المعلمات

هنا،

  • الشكل : هو شكل المصفوفة الصفرية numpy
  • نوع: هو نوع البيانات في الأصفار numpy. إنه اختياري. القيمة الافتراضية هي float64
  • الطلب: الافتراضي هو C وهو نمط صف أساسي لـ numpy.zeros() فيه Python.

Python numpy.zeros() مثال

import numpy as np
np.zeros((2,2))

الإخراج:

array([[0., 0.],
          [0., 0.]])

مثال على صفر numpy مع نوع البيانات

import numpy as np
np.zeros((2,2), dtype=np.int16)

الإخراج:

array([[0, 0],
         [0, 0]], dtype=int16)

ما هو numpy.ones()؟

وظيفة np.ones() يتم استخدامه لإنشاء مصفوفة مليئة بالآحاد. numpy.ones() في Python يمكن استخدامه عند تهيئة الأوزان أثناء التكرار الأول في TensorFlow والمهام الإحصائية الأخرى.

Python numpy.ones() بناء الجملة

numpy.ones(shape, dtype=float, order='C')

Python numpy.ones() المعلمات

هنا،

  • الشكل : هو شكل np.ones Python مجموعة
  • نوع: هو نوع البيانات في تلك numpy. إنه اختياري. القيمة الافتراضية هي float64
  • الطلب: الافتراضي هو C وهو نمط صف أساسي.

Python numpy.ones() مصفوفة ثنائية الأبعاد مع مثال لنوع البيانات

import numpy as np
np.ones((1,2,3), dtype=np.int16)

الإخراج:

array([[[1, 1, 1],        
       [1, 1, 1]]], dtype=int16)

وظيفة numpy.reshape() في Python

Python إعادة تشكيل NumPy تُستخدم الدالة لتشكيل مصفوفة دون تغيير بياناتها. في بعض المناسبات، قد تحتاج إلى إعادة تشكيل البيانات من واسعة إلى طويلة. يمكنك استخدام وظيفة np.reshape لهذا الغرض.

بناء جملة np.reshape()

numpy.reshape(a, newShape, order='C')

هنا،

a: المصفوفة التي تريد إعادة تشكيلها

الشكل الجديد: شكل الرغبات الجديد

الطلب: الافتراضي هو C وهو نمط صف أساسي.

مثال على إعادة تشكيل NumPy

import numpy as np
e  = np.array([(1,2,3), (4,5,6)])
print(e)
e.reshape(3,2)

الإخراج:

 // Before reshape
[[1 2 3] 
 [4 5 6]]
//After Reshape
array([[1, 2],       
	[3, 4],       
	[5, 6]])

numpy.flatten() في Python

Python NumPy تتسطح يتم استخدام الدالة لإرجاع نسخة من المصفوفة ذات بعد واحد. عندما تتعامل مع بعض الشبكات العصبية مثل convnet، فأنت بحاجة إلى تسوية المصفوفة. يمكنك استخدام وظائف np.flatten() لهذا الغرض.

بناء جملة np.flatten()

numpy.flatten(order='C')

هنا،
الطلب: الافتراضي هو C وهو نمط صف أساسي.

مثال على NumPy Flatten

e.flatten()

الإخراج:

array([1, 2, 3, 4, 5, 6])

ما هو numpy.hstack() في Python?

Numpy.hstack هي وظيفة في Python يتم استخدامه لتكديس تسلسلات صفائف الإدخال أفقيًا لإنشاء صفيف واحد. باستخدام وظيفة hstack()، يمكنك إلحاق البيانات أفقيًا. إنها وظيفة مريحة للغاية في NumPy.

دعونا ندرس hstack في Python مع مثال:

على سبيل المثال:

## Horitzontal Stack
import numpy as np
f = np.array([1,2,3])
g = np.array([4,5,6])
print('Horizontal Append:', np.hstack((f, g)))

الإخراج:

Horizontal Append: [1 2 3 4 5 6]

ما هو numpy.vstack() في Python?

Numpy.vstack هي وظيفة في Python والذي يستخدم لتكديس تسلسلات صفائف الإدخال عموديًا لإنشاء صفيف واحد. باستخدام الدالة vstack()، يمكنك إلحاق البيانات عموديًا.

لندرسها بمثال:

على سبيل المثال:

## Vertical Stack
import numpy as np
f = np.array([1,2,3])
g = np.array([4,5,6])
print('Vertical Append:', np.vstack((f, g)))

الإخراج:

Vertical Append: [[1 2 3]
 [4 5 6]]

بعد دراسة NumPy vstack و hstack، دعنا نتعلم مثالاً لإنشاء أرقام عشوائية في NumPy.

توليد عشوائي Numbers باستخدام NumPy

لتوليد أرقام عشوائية للتوزيع الغاوسي، استخدم:

numpy.random.normal(loc, scale, size)

هنا،

  • مكان: المعنى. مركز التوزيع
  • حجم: الانحراف المعياري.
  • المقاس: عدد المرتجعات

على سبيل المثال:

## Generate random nmber from normal distribution
normal_array = np.random.normal(5, 0.5, 10)
print(normal_array)			
[5.56171852 4.84233558 4.65392767 4.946659   4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]

إذا تم رسم التوزيع فسيكون مشابهًا للرسم البياني التالي

مثال لتوليد عشوائي Numbers باستخدام NumPy
مثال لتوليد عشوائي Numbers باستخدام NumPy

وظيفة NumPy Asarray

يتم استخدام الدالة asarray() عندما تريد تحويل إدخال إلى مصفوفة. يمكن أن يكون الإدخال عبارة عن قوائم أو Tuple أو ndarray وما إلى ذلك.

بناء الجملة:

numpy.asarray(data, dtype=None, order=None)[source]

هنا،

البيانات: البيانات التي تريد تحويلها إلى مصفوفة

dtype: هذا جدل إختياري. إذا لم يتم تحديده، فسيتم استنتاج نوع البيانات من بيانات الإدخال

الطلب: الافتراضي هو C وهو نمط صف أساسي. الخيار الآخر هو F (نمط فورتان)

على سبيل المثال:

ضع في اعتبارك المصفوفة ثنائية الأبعاد التالية التي تحتوي على أربعة صفوف وأربعة أعمدة مملوءة بـ 2

import numpy as np
A = np.matrix(np.ones((4,4)))

إذا كنت تريد تغيير قيمة المصفوفة، فلا يمكنك ذلك. والسبب هو أنه لا يمكن تغيير نسخة.

np.array(A)[2]=2
print(A)			
[[1. 1. 1. 1.]
 [1. 1. 1. 1.] 
 [1. 1. 1. 1.] 
 [1. 1. 1. 1.]]

المصفوفة غير قابلة للتغيير. يمكنك استخدام asarray إذا كنت تريد إضافة تعديل في المصفوفة الأصلية. دعونا نرى ما إذا كان هناك أي تغيير يحدث عندما تريد تغيير قيمة الصفوف الثالثة بالقيمة 2.

np.asarray(A)[2]=2
print(A)

شرح الكود:

np.asarray(A): يحول المصفوفة A إلى مصفوفة

[2]: تحديد الصفوف الثالثة

الإخراج:

[[1. 1. 1. 1.] 
      [1. 1. 1. 1.] 
      [2. 2. 2. 2.] # new value 
      [1. 1. 1. 1.]]

ما هو numpy.arange()؟

numpy.arange () هي دالة numpy تحمل في ثناياها عوامل تقوم بإرجاع كائن ndarray يحتوي على قيم متباعدة بشكل متساوٍ ضمن فاصل زمني محدد. على سبيل المثال، تريد إنشاء قيم من 1 إلى 10؛ يمكنك استخدام np.arange() في Python وظيفة.

بناء الجملة:

numpy.arange(start, stop, step, dtype)

Python معلمات النطاق NumPy:

  • إبدأ: بداية الفاصل الزمني لـ np.arange in Python وظيفة.
  • قلة النوم: نهاية الفاصل الزمني.
  • خطوة: التباعد بين القيم. الخطوة الافتراضية هي 1.
  • نوع: هو نوع من إخراج المصفوفة لنطاق NumPy Python.

على سبيل المثال:

import numpy np
np.arange(1, 11)

الإخراج:

array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

على سبيل المثال:

إذا كنت تريد تغيير الخطوة في وظيفة NumPy arange هذه Python على سبيل المثال، يمكنك إضافة رقم ثالث بين قوسين. سوف تغير الخطوة.

import numpy np
np.arange(1, 14, 4)

الإخراج:

array([ 1,  5,  9, 13])

وظيفة NumPy Linspace

يعطي Linspace عينات متباعدة بشكل متساو.

بناء الجملة:

numpy.linspace(start, stop, num, endpoint)

هنا،

  • إبدأ:قيمة البداية للتسلسل
  • قلة النوم: القيمة النهائية للتسلسل
  • في: عدد العينات المراد إنشاؤها. الافتراضي هو 50
  • نقطة النهاية: إذا كان True (افتراضي)، فإن التوقف هو القيمة الأخيرة. إذا كان خطأ، لا يتم تضمين قيمة التوقف.

على سبيل المثال:

على سبيل المثال، يمكن استخدامه لإنشاء 10 قيم من 1 إلى 5 متباعدة بشكل متساو.

import numpy as np
np.linspace(1.0, 5.0, num=10)

الإخراج:

array([1.        , 1.44444444, 1.88888889, 2.33333333, 2.77777778,       3.22222222, 3.66666667, 4.11111111, 4.55555556, 5.        ])

إذا كنت لا تريد تضمين الرقم الأخير في الفاصل الزمني، فيمكنك تعيين نقطة النهاية على خطأ

np.linspace(1.0, 5.0, num=5, endpoint=False)

الإخراج:

array([1. , 1.8, 2.6, 3.4, 4.2])

وظيفة LogSpace NumPy في Python

يقوم LogSpace بإرجاع أرقام متباعدة بشكل متساوٍ على مقياس لوغاريتمي. يحتوي Logspace على نفس معلمات np.linspace.

بناء الجملة:

numpy.logspace(start, stop, num, endpoint)

على سبيل المثال:

np.logspace(3.0, 4.0, num=4)

الإخراج:

array([ 1000. ,  2154.43469003,  4641.58883361, 10000.        ])

وأخيرًا، إذا كنت تريد التحقق من حجم ذاكرة عنصر ما في المصفوفة، فيمكنك استخدام itemize

x = np.array([1,2,3], dtype=np.complex128)
x.itemsize

الإخراج:

16

يأخذ كل عنصر 16 بايت.

الفهرسة والتقطيع Python

تقطيع البيانات أمر تافه مع numpy. سنقوم بتقطيع المصفوفة "e". لاحظ أنه في Python، يجب عليك استخدام الأقواس لإرجاع الصفوف أو الأعمدة
على سبيل المثال:

## Slice
import numpy as np
e  = np.array([(1,2,3), (4,5,6)])
print(e)
[[1 2 3]
 [4 5 6]]

تذكر مع numpy أن المصفوفة/العمود الأول يبدأ عند 0.

## First column
print('First row:', e[0])

## Second col
print('Second row:', e[1])

الإخراج:

First row: [1 2 3]
Second row: [4 5 6]

In Python، مثل العديد من اللغات الأخرى،

  • تمثل القيم الموجودة قبل الفاصلة الصفوف
  • القيمة الموجودة على الحقوق تشير إلى الأعمدة.
  • إذا كنت تريد تحديد عمود، فأنت بحاجة إلى إضافة : قبل فهرس العمود.
  • : يعني أنك تريد كافة الصفوف من العمود المحدد.
print('Second column:', e[:,1])
Second column: [2 5]

لإرجاع القيمتين الأوليين للصف الثاني. تستخدم : لتحديد جميع الأعمدة حتى العمود الثاني

## Second Row, two values
  print(e[1, :2])			
  [4 5]

الوظائف الإحصائية في Python

يحتوي NumPy على عدد لا بأس به من الوظائف الإحصائية المفيدة للعثور على الحد الأدنى والحد الأقصى والانحراف المعياري المئوي والتباين وما إلى ذلك من العناصر المحددة في المصفوفة. يتم شرح الوظائف على النحو التالي -

تم تجهيز Numpy بوظيفة إحصائية قوية كما هو موضح أدناه

الوظيفة نمباي
اقل شئ np.min()
اكثر شئ np.max()
تعني np.mean ()
متوسط np.median()
الانحراف المعياري np.std()

خذ بعين الاعتبار المصفوفة التالية:

على سبيل المثال:

import numpy as np
normal_array = np.random.normal(5, 0.5, 10)
print(normal_array)

الإخراج:

[5.56171852 4.84233558 4.65392767 4.946659   4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]

مثال على الدالة الإحصائية NumPy

### Min 
print(np.min(normal_array))

### Max 
print(np.max(normal_array))

### Mean 
print(np.mean(normal_array))

### Median
print(np.median(normal_array))

### Sd
print(np.std(normal_array))

الإخراج:

4.467042435266913
5.612113171990201
4.934841002270593
4.846995625786663
0.3875019367395316

ما هو منتج النقطة numpy؟

منتج Numpy.dot هي مكتبة قوية لحساب المصفوفة. على سبيل المثال، يمكنك حساب حاصل الضرب النقطي باستخدام np.dot. منتج Numpy.dot هو المنتج النقطي لـ a وb. numpy.dot() في Python يتعامل مع المصفوفات ثنائية الأبعاد ويقوم بعمليات ضرب المصفوفات.

بناء الجملة:

numpy.dot(x, y, out=None)

المعلمات

هنا،

x، y: صفائف الإدخال. يجب أن يكون كل من x وy 1-D أو 2-D لكي تعمل الدالة np.dot()

خارج:هذه هي وسيطة الإخراج لمصفوفة أحادية الأبعاد التي يجب إرجاعها. وإلا فيجب إرجاع ndarray.

الإسترجاع :

الدالة numpy.dot() في Python تعيد حاصل ضرب نقطي لمصفوفتين x وy. تعيد دالة dot() قيمة عددية إذا كان كل من x وy أحاديي البعد؛ وإلا فإنها تعيد مصفوفة. إذا تم إعطاء "out"، فسيتم إرجاعها.

يثير

نقطة المنتج في Python يُطلق استثناء ValueError إذا كان البعد الأخير لـ x ليس له نفس حجم البعد الأخير الثاني لـ y.

على سبيل المثال:

## Linear algebra
### Dot product: product of two arrays
f = np.array([1,2])
g = np.array([4,5])
### 1*4+2*5
np.dot(f, g)

الإخراج:

14

ضرب المصفوفات في Python

يتم استخدام الدالة Numpy matmul() لإرجاع منتج المصفوفة المكون من صفيفين. هنا كيف يعمل

1) مصفوفات ثنائية الأبعاد، تقوم بإرجاع المنتج العادي

2) الأبعاد > 2، يتم التعامل مع المنتج على أنه كومة من المصفوفة

3) يتم أولاً ترقية المصفوفة أحادية الأبعاد إلى مصفوفة، ثم يتم حساب المنتج

بناء الجملة:

numpy.matmul(x, y, out=None)

هنا،

x، y: صفائف الإدخال. العددية غير مسموح بها

خارج: هذه معلمة اختيارية. عادةً ما يتم تخزين الإخراج في ndarray

على سبيل المثال:

بنفس الطريقة، يمكنك حساب ضرب المصفوفات باستخدام np.matmul

### Matmul: matruc product of two arrays
h = [[1,2],[3,4]] 
i = [[5,6],[7,8]] 
### 1*5+2*7 = 19
np.matmul(h, i)

الإخراج:

array([[19, 22],       
            [43, 50]])

مقرر

أخيرًا وليس آخرًا، إذا كنت بحاجة إلى حساب المحدد، فيمكنك استخدام np.linalg.det(). لاحظ أن numpy يعتني بالبعد.

على سبيل المثال:

## Determinant 2*2 matrix
### 5*8-7*6np.linalg.det(i)

الإخراج:

-2.000000000000005

الملخص

  • Python هي مكتبة مفتوحة المصدر متوفرة في Python، مما يساعد في الرياضيات والعلمية والهندسية و برمجة علوم البيانات.
  • numpy.zeros() أو np.zeros Python يتم استخدام الدالة لإنشاء مصفوفة مليئة بالأصفار.
  • numpy.ones() في Python يمكن استخدامه عند تهيئة الأوزان أثناء التكرار الأول في TensorFlow والمهام الإحصائية الأخرى.
  • Python تُستخدم وظيفة NumPy Reshape لتشكيل مصفوفة دون تغيير بياناتها.
  • Python يتم استخدام الدالة NumPy Flatten لإرجاع نسخة من المصفوفة ذات بعد واحد.
  • Numpy.hstack هي وظيفة في Python يتم استخدامه لتكديس تسلسلات صفائف الإدخال أفقيًا لإنشاء صفيف واحد.
  • Numpy.vstack هي وظيفة في Python والذي يستخدم لتكديس تسلسلات صفائف الإدخال عموديًا لإنشاء صفيف واحد.
  • numpy.arange() هي دالة numpy تحمل في ثناياها عوامل تقوم بإرجاع كائن ndarray يحتوي على قيم متباعدة بشكل متساوٍ ضمن فاصل زمني محدد.
  • يعد منتج Numpy.dot مكتبة قوية لحساب المصفوفات.
  • يتم استخدام الدالة Numpy matmul() لإرجاع منتج المصفوفة المكون من صفيفين.