مقدمة المترجم
مرحبا بالجميع ، ها نحن نأتي إلى الجزء الأخير. هل لديك قراءة لطيفة!
التنقل:
كثيرات الحدود الرياضية
يوفر NumPy طرقًا للعمل مع كثيرات الحدود. بتمرير قائمة الجذور ، يمكنك الحصول على معاملات المعادلة:
>>> np.poly([-1, 1, 1, 10]) array([ 1, -11, 9, 11, -10])
هنا ، ترجع الصفيف المعاملات المقابلة للمعادلة:
.
يمكن أيضًا إجراء العملية العكسية: عند تمرير قائمة المعاملات ، سترجع وظيفة الجذر جميع جذور كثيرات الحدود:
>>> np.roots([1, 4, -2, 3]) array([-4.57974010+0.j , 0.28987005+0.75566815j, 0.28987005-0.75566815j])
لاحظ أنه في هذه المعادلة
هناك جذران وهميان.
يمكن دمج معاملات كثيرة الحدود. دعونا ننظر في التكامل
في
. عادة الثابت C هو صفر:
>>> np.polyint([1, 1, 1, 1]) array([ 0.25 , 0.33333333, 0.5 , 1. , 0. ])
وبالمثل ، يمكن أخذ المشتقات:
>>> np.polyder([1./4., 1./3., 1./2., 1., 0.]) array([ 1., 1., 1., 1.])
كما تدعم وظائف polyadd و polysub و polymul و polydiv الجمع والمعاملات والضرب وتقسيم المعاملات متعددة الحدود ، على التوالي.
تستبدل دالة polyval القيمة المعطاة في كثير الحدود. ضع في اعتبارك كثيرات الحدود
عند س = 4:
>>> np.polyval([1, -2, 0, 2], 4) 34
في الختام ، يمكن استخدام دالة polyfit لتحديد (استيفاء) كثير الحدود لترتيب معين لمجموعة من القيم:
>>> x = [1, 2, 3, 4, 5, 6, 7, 8] >>> y = [0, 2, 1, 3, 7, 10, 11, 19] >>> np.polyfit(x, y, 2) array([ 0.375 , -0.88690476, 1.05357143])
الصفيف الذي تم إرجاعه هو قائمة معاملات كثيرة الحدود. يمكن العثور على وظائف استكمال أكثر تعقيدًا في SciPy.
الإحصائيات
بالإضافة إلى دالات الوسط ، var ، و std ، يوفر NumPy المزيد من الطرق للعمل مع الإحصائيات في المصفوفات.
يمكن العثور على الوسيط مثل هذا:
>>> a = np.array([1, 4, 3, 8, 9, 2, 3], float) >>> np.median(a) 3.0
لوحظ معامل الارتباط لبعض المتغيرات عدة مرات ويمكن العثور عليه من صفائف النموذج: [[x1، x2، ...]، [y1، y2، ...]، [z1، z2، ...] ، .. .] ، حيث x ، y ، z هي ملاحظات كمومية مختلفة وتشير الأرقام إلى عدد "الملاحظات":
>>> a = np.array([[1, 2, 1, 3], [5, 3, 1, 8]], float) >>> c = np.corrcoef(a) >>> c array([[ 1. , 0.72870505], [ 0.72870505, 1. ]])
لدينا مصفوفة مرتجعة c [i، j] تقوم بتخزين معامل الارتباط للملاحظات الكمومية i-th و j-th.
وبالمثل ، يمكن العثور على لحظة التغاير:
>>> np.cov(a) array([[ 0.91666667, 2.08333333], [ 2.08333333, 8.91666667]])
أرقام عشوائية
جزء مهم من كل محاكاة هو القدرة على توليد أرقام عشوائية. للقيام بذلك ، نستخدم مولد الأرقام العشوائية الزائفة المدمج في NumPy في الوحدة الفرعية العشوائية. تعتبر الأرقام عشوائية
زائفة ، بمعنى أنها يتم إنشاؤها بشكل حتمي من رقم البذور ، ولكنها موزعة بشكل عشوائي في أوجه التشابه الإحصائية. لإنشاء NumPy يستخدم خوارزمية خاصة تسمى Mersenne Twister.
يمكنك تحديد عنصر توليد سلسلة من الأرقام العشوائية على النحو التالي:
>>> np.random.seed(293423)
البذور عدد صحيح. كل برنامج يبدأ بنفس البذور سيولد نفس تسلسل الأرقام في كل مرة. قد يكون هذا مفيدًا في تصحيح الأخطاء ، ولكن بشكل عام لا نحتاج إلى تعيين البذرة ، في الواقع ، عندما نقوم بتشغيل البرنامج عدة مرات ، نريد الحصول على تسلسل مختلف من الأرقام في كل مرة. إذا لم يتم تنفيذ هذا الأمر ، يختار NumPy تلقائيًا بذرة عشوائية (بناءً على الوقت) ، والتي تختلف في كل مرة يبدأ فيها البرنامج.
يمكن إنشاء صفيف من الأرقام العشوائية من نصف الفاصل الزمني [0.0 ، 1.0) على النحو التالي:
>>> np.random.rand(5) array([ 0.40783762, 0.7550402 , 0.00919317, 0.01713451, 0.95299583])
يمكن استخدام وظيفة rand لإنشاء مصفوفات ثنائية الأبعاد ، أو يمكن استخدام وظيفة إعادة التشكيل:
>>> np.random.rand(2,3) array([[ 0.50431753, 0.48272463, 0.45811345], [ 0.18209476, 0.48631022, 0.49590404]]) >>> np.random.rand(6).reshape((2,3)) array([[ 0.72915152, 0.59423848, 0.25644881], [ 0.75965311, 0.52151819, 0.60084796]])
لتوليد رقم عشوائي واحد على الفاصل الزمني [0.0 ، 1.0):
>>> np.random.random() 0.70110427435769551
لإنشاء عدد صحيح عشوائي في النطاق [min، max) ، استخدم دالة randint (min، max):
>>> np.random.randint(5, 10) 9
في كل واحد من أمثلةنا ، أنشأنا أرقامًا من توزيع منتظم موحد. يشمل NumPy أيضًا مولدات للتوزيعات الأخرى ، مثل: بيتا ، ذي الحدين ، مربع كاي ، Dirichlet ، أسي ، فيشر ، جاما ، هندسي ، غامبي ، هندسي ، لابلاس ، لوجستي ، لوغنورمالي ، لوغاريتمي ، متعدد الحدود ، متعدد الأبعاد عادي ، ذو حدين سلبي ، غير مركزي مربع خي ، فيشر خارج المركز ، عادي (Gauss) ، باريتو ، بواسون ، قوة ، Rayleigh ، Cauchy ، طالب ، مثلثي ، Von Mies ، Wald ، Weibull و Zipf. دعونا نلقي نظرة على مثالين.
للتوليد من توزيع Poisson المنفصل عند 6.0 = 6.0 ،
>>> np.random.poisson(6.0) 5
لتوليد رقم من التوزيع الطبيعي (Gaussian) بمتوسط قيمة μ = 1.5 والانحراف المعياري σ = 4.0:
>>> np.random.normal(1.5, 4.0) 0.83636555041094318
للحصول على رقم من التوزيع الطبيعي (μ = 0 ، σ = 1) ، بدون تحديد وسيطات:
>>> np.random.normal() 0.27548716940682932
لإنشاء قيم متعددة ، استخدم وسيطة الحجم:
>>> np.random.normal(size=5) array([-1.67215088, 0.65813053, -0.70150614, 0.91452499, 0.71440557])
يمكن أيضًا استخدام الوحدة النمطية لتوليد أرقام عشوائية لتوزيع القيم بشكل عشوائي في قائمة. يمكن أن يكون ذلك مفيدًا إذا أردنا توزيع القيم عشوائيًا في قائمة:
>>> l = range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> np.random.shuffle(l) >>> l [4, 9, 5, 0, 2, 7, 6, 8, 1, 3]
لاحظ أن وظيفة المراوغة تعدل الصفيف الموجود ولا تعيد صفيفًا جديدًا.
بعض المعلومات الإضافية
يتضمن NumPy العديد من الميزات التي لم نذكرها هنا. على وجه الخصوص ، هذه وظائف للعمل مع تحويل فورييه المنفصل ، وعمليات أكثر تعقيدًا في الجبر الخطي ، واختبار صفائف الحجم / البعد / النوع ، وتقسيم الصفيفات وربطها ، والرسوم البيانية ، وإنشاء صفائف من أي بيانات بطرق مختلفة ، وإنشاء وتشغيل صفائف الشبكة ، بقيم خاصة (NaN ، Inf) ، عمليات ضبط ، إنشاء أنواع مختلفة من المصفوفات الخاصة وحساب الوظائف الرياضية الخاصة (على سبيل المثال: وظائف Bessel). يمكنك أيضًا الاطلاع على
وثائق NumPy للحصول على تفاصيل أكثر دقة.
وحدات SciPy
تعمل SciPy على توسيع وظائف NumPy بشكل جيد للغاية. لن نتحدث عن تفاصيلها ، ولكن النظر في بعض إمكاناتها. تتوفر معظم وظائف SciPy بعد استيراد الوحدة النمطية:
>>> import scipy
توفر وظيفة المساعدة معلومات مفيدة حول SciPy:
>>> help(scipy)
Help on package scipy:
NAME
scipy
FILE
c:\python25\lib\site-packages\scipy\__init__.py
DESCRIPTION
SciPy --- A scientific computing package for Python
===================================================
Documentation is available in the docstrings and
online at http://docs.scipy.org.
Contents
--------
SciPy imports all the functions from the NumPy namespace, and in
addition provides:
Available subpackages
---------------------
odr --- Orthogonal Distance Regression [*]
misc --- Various utilities that don't have
another home.sparse.linalg.eigen.arpack --- Eigenvalue solver using iterative methods. [*]
fftpack --- Discrete Fourier Transform algorithms[*]
io --- Data input and output [*]
sparse.linalg.eigen.lobpcg --- Locally Optimal Block Preconditioned Conjugate Gradient Method (LOBPCG) [*]
special --- Airy Functions [*]
lib.blas --- Wrappers to BLAS library [*]
sparse.linalg.eigen --- Sparse Eigenvalue Solvers [*]
stats --- Statistical Functions [*]
lib --- Python wrappers to external libraries [*]
lib.lapack --- Wrappers to LAPACK library [*]
maxentropy --- Routines for fitting maximum entropymodels [*]
integrate --- Integration routines [*]
ndimage --- n-dimensional image package [*]
linalg --- Linear algebra routines [*]
spatial --- Spatial data structures and algorithms[*]
interpolate --- Interpolation Tools [*]
sparse.linalg --- Sparse Linear Algebra [*]
sparse.linalg.dsolve.umfpack --- :Interface to the UMFPACK library: [*]
sparse.linalg.dsolve --- Linear Solvers [*]
optimize --- Optimization Tools [*]
cluster --- Vector Quantization / Kmeans [*]
signal --- Signal Processing Tools [*]
sparse --- Sparse Matrices [*]
[*] - using a package requires explicit import (see pkgload)
...
لاحظ أن بعض الوحدات الفرعية تحتاج مباشرة إلى استيراد إضافي ، والذي تم تمييزه بنجمة:
>>> import scipy >>> import scipy.interpolate
يتم توثيق الوظائف في كل وحدة بشكل جيد في الوثائق الداخلية وفي الوثائق الرسمية. يوفر معظمها وظائف مباشرة للعمل مع الخوارزميات العددية وهي سهلة الاستخدام للغاية. وهكذا ، SciPy يمكن أن يوفر مقدارًا كبيرًا من الوقت في الحسابات العلمية ، لأن يوفر وظائف مكتوبة ومختبرة بالفعل.
لن نفكر في SciPy بالتفصيل ، لكن الجدول أدناه سيغطي بعض ميزاته:
الوحدة | ما يستخدم ل |
---|
scipy.constants | مجموعة من الثوابت الرياضية والفيزيائية |
scipy.special | العديد من الوظائف الخاصة للفيزياء الرياضية ، مثل: Airy ، elliptic ، Bessel ، gamma ، beta ، hyperge engineering ، parabolic cylinder ، Mathieu ، spherical wave ، Struve ، Kelvin. |
سكيبي | وظائف للعمل مع التكامل العددي باستخدام طرق شبه المنحرف ، سيمبسون ، رومبرج وغيرها. يوفر أيضًا طرقًا للعمل مع معادلات تفاضلية كاملة. |
سكيبي. تحسين | الطرق القياسية العالية / المنخفضة للعمل مع وظائف المستخدم العامة. تضمنت الخوارزميات: Nelder - Mead و Pull ( Powell's ) ، التدرجات المترافقة ، Bruden - Fletcher - Goldfarb - Channo ، المربعات الصغرى ، التحسين الشرطي ، محاكاة الصلب ، البحث الكامل ، Brent ، Newton ، bisection ، Broyden ، Anderson والبحث الخطي. |
scipy.linalg | وظائف أوسع للعمل مع الجبر الخطي من NumPy. يوفر المزيد من الخيارات لاستخدام وظائف خاصة وسريعة لكائنات معينة (على سبيل المثال: مصفوفة ثلاثية الأقطار). الطرق المتضمنة: البحث عن مصفوفة غير متحللة ، والبحث عن محدد ، حل الأنظمة المعادلات الخطية ، حساب المعايير والمصفوفة الزائفة ، التحلل الطيفي ، التحلل الفردي ، التحلل LU ، التحلل Cholesky ، التحلل QR ، التحلل Schur ، والعديد من العمليات الرياضية الأخرى للعمل مع العمليات الحسابية الأخرى. |
مخادع | وظائف للعمل مع المصفوفات المتفرقة الكبيرة |
مخادع | طرق وفئات لإقحام الكائنات التي يمكن استخدامها للبيانات العددية المنفصلة. الخطية والخطية ( ملاحظة المترجم: التمثيل الرياضي للمنحنيات الناعمة ) الاستيفاء متاح لمجموعات البيانات أحادية وثنائية الأبعاد. |
scipy.fftpack | طرق معالجة تحويلات فورييه. |
إشارة | طرق معالجة الإشارات ، على سبيل المثال: التفاف الوظيفة ، والارتباط ، وتحويل فورييه المنفصل ، وتمهيد خط B ، والتصفية ، وما إلى ذلك ، إلخ. |
سكيبي | مكتبة كبيرة من الوظائف والتوزيعات الإحصائية للعمل مع مجموعات البيانات. |
تواصل مجموعة كبيرة من المطورين باستمرار تطوير ميزات SciPy الجديدة. الطريقة العملية الجيدة هي: إذا كنت تفكر في تنفيذ أي وظائف وطرق رقمية في التعليمات البرمجية الخاصة بك ، فيمكنك أولاً الاطلاع على وثائق SciPy الأصلية. هناك احتمال أن شخص ما قد نفذ بالفعل وساهم في SciPy.
خاتمة
لقد انتهت سلسلة مقالاتنا. شكرا لكل من قرأ و استغرق وقتا. آمل أيضًا أن تكون قد قدمت بعض المعلومات المفيدة وتعلمت شيئًا جديدًا. استمر في تطوير وتعلم أشياء جديدة! اراك قريبا.