البرنامج التعليمي كيفية كتابة وظائف MatLab في بايثون

جرب أداة القضاء على المشاكل

ملخص

في عملي مؤخرًا ، كنت أعيد كتابة الخوارزميات التي تم تطويرها في ماتلاب إلى بايثون ، بعض الوظائف ليست بهذه البساطة للتكيف ، خاصة وظائف المصفوفة التي يتم استدعاؤها صفائف الخلية .



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






للحفاظ على التوافق ، قمت بإنشاء وظائف بنفس الاسم يتم استخدامها في MatLab والتي يتم تغليفها في فئة تسمى دقة .



1. الاختبار

قم بعمل نسخة من المستودع واتبع التعليمات الموجودة في ملف README:



أدناه سوف أعرض بعض الأمثلة ، هذه واردة في اختبارات الوحدة.






1.1 بدء توقيت ساعة الإيقاف

قياس الوقت المستغرق في المعالجة.

from precision import Precision p = Precision() p.tic() for i in range(0, 1000): print(i) p.toc()

سيبدو الإخراج مثل هذا:

: > Elapsed time is 0:0:2 secounds.

1.2 النسب المئوية لمجموعة البيانات

يستخدم هذا للحصول على النسبة المئوية. في المثال أدناه ، نقوم بإنشاء نطاق من التواريخ الترتيبية بقطع 5٪ من اليسار و 5٪ من اليمين.

from datetime import datetime from precision import Precision p = Precision() d = [i for i in p.dtrange(datetime(2018, 6, 12), datetime(2059, 12, 12), {'days':1, 'hours':2})] x = [p.datenum(i.date()) for i in d] x1 = p.prctile(x, 5) x2 = p.prctile(x, 95) r = (x2 - x1)

سيبدو الإخراج مثل هذا:

5% lower: 737980.1 5% higher: 751621.9 delta: 13641.800000000047

1.3 صفيف الخلايا (cell2mat)

يؤدي هذا إلى تحويل صفيف خلية إلى مصفوفة عادية من نوع البيانات الأساسي.

from precision import Precision p = Precision() p.cell2mat([[1, 2], [3, 4]]) p.cell2mat('1 2; 3 4')

سيبدو الإخراج مثل هذا:

matrix([[1, 2], [3, 4]])

1.4 صفيف الخلايا (num2cell)

تحويل صفيف إلى صفيف خلايا بخلايا ذات حجم ثابت.

import numpy from precision import Precision p = Precision() x = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], numpy.int64) p.num2cell(x)

سيبدو الإخراج مثل هذا:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

1.5 سلاسل متسلسلة (سترات)

هذا يربط السلاسل أفقيا باستخدام سترات.

import pandas from precision import Precision p = Precision() df = pandas.DataFrame(data={'A': [1, 2], 'B': [3, 4]}, dtype=numpy.int8) p.strcat(df, 'B')

سيبدو الإخراج مثل هذا:

['3', '4']

1.6 الرسم البياني (هيستك)

يحسب هذا عدد القيم في x الموجودة داخل كل نطاق حاوية محدد. يحدد الإدخال ، binranges ، نقاط النهاية لكل حاوية. الإخراج ، bincounts ، يحتوي على عدد العناصر من x في كل سلة.

جعل إعجابات تويتر خاصة
import numpy from precision import Precision p = Precision() v = numpy.array([[1.5, 2.0, 3], [4, 5.9, 6]], numpy.int64) p.histc(v, numpy.amax(v) + 1)

سيبدو الإخراج مثل هذا:

(array([1, 1, 1, 0, 1, 1, 1]), array([1., 1.71428571, 2.42857143, 3.14285714, 3.85714286, 4.57142857, 5.28571429, 6.]))

1.7 فريد

البحث عن قيم فريدة في مصفوفة وإرجاع الفهارس والمعكوس والتعداد.

import numpy from precision import Precision p = Precision() x = [0, 1, 1, 2, 3, 4, 4, 5, 5, 6, 7, 7, 7] p.unique(numpy.array([x]))

سيبدو الإخراج مثل هذا:

array([[array([0, 1, 2, 3, 4, 5, 6, 7]), array([[ 0, 1, 3, 4, 5, 7, 9, 10]]), array([0, 1, 1, 2, 3, 4, 4, 5, 5, 6, 7, 7, 7]), array([1, 2, 1, 1, 2, 2, 1, 3])]], dtype=object)

1.8 التداخلات

البحث عن التراكبات بين صفيفتين تعيد الفهرس.

import numpy from precision import Precision p = Precision() x, y = p.overlap2d(numpy.array(['A','B','B','C']), numpy.array(['C','A','B','C','D']))

سيبدو الإخراج مثل هذا:

(array([0, 1, 2, 3]), array([1, 2, 0, 3]))

الاعتبارات

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

قراءة متعمقة

MATLAB vs Python: لماذا وكيف تقوم بالتبديل

إنشاء مخططات بيانية في بايثون باستخدام Matplotlib

دروس بايثون - برمجة Python GUI - أمثلة على Python GUI (Tkinter Tutorial)

رمز Python 3 الأساسي للقوائم

================================================== == =========

# بايثون # ماتلاب

dzone.com

البرنامج التعليمي كيفية كتابة وظائف MatLab في بايثون

برنامج تعليمي حول كتابة وظائف تشبه MatLab باستخدام لغة Python ومكتبة NumPy.