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

ما هو NumPy في بايثون؟

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

بالنسبة لأي مشروع علمي، فإن 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

ما هو مصفوفة بايثون NumPy؟

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

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

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

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

myPythonList = [1,9,8,3]

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

numpy_array_from_list = np.array(myPythonList)

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

numpy_array_from_list

الإخراج:

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

من الناحية العملية، ليست هناك حاجة للإعلان عن قائمة بايثون. يمكن الجمع بين العملية.

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

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

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

العمليات الرياضية على المصفوفة

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

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

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')

معلمات بايثون numpy.zeros()

هنا،

  • الشكل: هو شكل المصفوفة الصفرية numpy
  • نوع: هو نوع البيانات في الأصفار numpy. إنه اختياري. القيمة الافتراضية هي float64
  • الطلب: الافتراضي هو C وهو نمط صف أساسي لـ numpy.zeros() في 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 والمهام الإحصائية الأخرى.

بناء جملة بايثون numpy.ones()

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

معلمات بايثون numpy.ones()

هنا،

  • الشكل: هو شكل np.ones مصفوفة بايثون
  • نوع: هو نوع البيانات في تلك 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() في بايثون

إعادة تشكيل بايثون 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() في بايثون

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

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

numpy.flatten(order='C')

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

مثال على NumPy Flatten

e.flatten()

الإخراج:

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

ما هو numpy.hstack() في بايثون؟

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

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

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

## 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() في بايثون؟

Numpy.vstack هي دالة في لغة بايثون تُستخدم لتكديس تسلسلات مصفوفات الإدخال عموديًا من أجل إنشاء مصفوفة واحدة. باستخدام الدالة 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.

توليد أرقام عشوائية باستخدام 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]

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

مثال لتوليد أرقام عشوائية باستخدام NumPy
مثال لتوليد أرقام عشوائية باستخدام NumPy

وظيفة NumPy Asarray

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

بناء الجملة:

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

هنا،

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

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

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

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

خذ بعين الاعتبار ما يليwing مصفوفة ثنائية الأبعاد مكونة من أربعة صفوف وأربعة أعمدة مملوءة بالرقم 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 في وظيفة 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 في بايثون

تُرجع الدالة 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 بايت.

الفهرسة والتقطيع في بايثون

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

## 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]

في بايثون، مثل العديد من اللغات الأخرى،

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

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

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

وظائف إحصائية في بايثون

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

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

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

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

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

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()

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

الإسترجاع :

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

يثير

يُطلق منتج Dot في 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

ضرب المصفوفات في بايثون

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

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

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

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

بناء الجملة:

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

نبذة عامة

  • بايثون هي مكتبة مفتوحة المصدر متوفرة بلغة بايثون، والتي تساعد في الرياضيات والعلمية والهندسية برمجة علوم البيانات.
  • تُستخدم الدالة 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() لإرجاع منتج المصفوفة المكون من صفيفين.