Побудова бібліотек для Python у мові програмування C презентация

Содержание

Слайд 2

ПОСТАНОВКА ЗАДАЧІ

Дана дипломна робота присвячена дослідженню взаємозв’язку між мовами С та Python .
Метою

роботи є аналіз способу побудови бібліотек для Python на C. На прикладі розширення для NumPy для функції random.shuffle(), яка обробляє n-мірні масиви й перемішує елементи в ньому, оптимізації роботи стандартної функції та розширення її можливостей. 
Також в роботі буде висвітлено, яким чином можна передавати змінні(об’єкти) Python та масиви NumPy до коду С та як повертати їх в інтерпретатоp Python та в ній буде розписано основні та найшвидші алгоритми для генерації випадкових чисел та їх історію.  

Слайд 3

МОВА PYTHON

Python— інтерпретована об'єктно-орієнтована мова програмування високого рівня зі строгою динамічною типізацією.
Розроблена

в 1990 році Гвідо ван Россумом.
Назва походить від популярної гумористичної передачі Monty Python’s Flying Circus
Інтерпретатор мови Python може бути розширений функціями та типами даних, розробленими на C чи C++ (або на іншій мові, яку можна викликати із C).

Слайд 4

NUMPY

Numpy — розширення мови Python, що додає підтримку великих багатовимірних масивів і матриць,

разом з великою бібліотекою високорівневих математичних функцій для операцій з цими масивами.
Попередник NumPy, Numeric, був спочатку створений Jim Hugunin. NumPy — відкрите програмне забезпечення і має багато розробників.
Розширення написане на Python, Си та Фортран.

Слайд 5

РОЗШИРЕННЯ С

Розширення C - це код C, який можна компілювати та зв’язати із

спільною бібліотекою, яку можна імпортувати, як будь-який модуль Python, і ви можете викликати вказані підпрограми C так, як вони були функціями Python.  

Слайд 6

ЗАГАЛЬНА СХЕМА РОЗШИРЕНЬ NUMPY

Три речі, які необхідно зробити перед функціями розширення C

у вихідному файлі C:
Потрібно включити заголовки Python та NumPy.
Кожне розширення має бути названо у визначальній структурі на початку файлу. Це ім'я, яке використовується для доступу до розширення з функції Python.
Далі робиться набір ініціалізації викликів для налаштування викликів і інтерфейсу Python та NumPy. Це буде однаково для всіх розширень, що включають NumPy та Python. Таким чином, виклики init можна скопіювати у кожен файл розширення.

Слайд 7

КОЖНЕ РОЗШИРЕННЯ C МАТИМЕ ТАКУ ФОРМУ

Аргументи завжди будуть однаковими: (PyObject *self, PyObject *args).

Вони вказують на загальні об'єкти Python, і вони автоматично надаються файлами заголовків, які потрібні для використання об’єктів з NumPy та самого Python.
Аргументи обробляються за допомогою виклику функції, яка аналізує їх і присвоює їм визначені C об'єкти.
Далі результати цього синтаксису можуть бути перевірені програмами утиліти, яка потрапляє в структуру, що представляє об'єкт, і гарантує, що дані мають правильний вид (float або int, 1D або 2D масив тощо).

Слайд 8

Після деяких можливих перевірок даних типи даних C ініціалізуються для вказівки на частину

даних масивів NumPy за допомогою функцій утиліт.
Інформація про наступні параметри вилучається, щоб ви знали кількість стовпців, рядків, розміри вектора тощо.
Тепер можна використовувати масиви C для управління даними в масивах NumPy. Дані масивів C та даних C з вищевказаного розбору вказують на вихідні дані Python / NumPy, тому зміни, вносяться, впливають на значення масиву, коли ви повертаєтесь до Python після повернення розширення. Можна передавати масиви іншим функціям C, які виконують обчислення, тощо.
Нарешті, можна повертатися до функції виклику Python, повертаючи значення масиву NumPy.

Слайд 9

АЛГОРИТМ ДЛЯ НАПИСАННЯ ВЛАСНОЇ ФУНКЦІЇ ДЛЯ ПЕРЕТАСУВАННЯ ЕЛЕМЕНТІВ МАСИВУ.

Тасування Фішера - Єйтса (названо

на честь Рональда Фішера і Франка Єйтса (Frank Yates)), відоме також під ім'ям тасування Кнута (в честь Дональда Кнута), - це алгоритм створення випадкових перестановок кінцевого безлічі, просто кажучи, для випадкового тасування безлічі.

Слайд 10

Реєстрація методів модуля та Визначення модуля

Слайд 11

УПАКОВКА МОДУЛЯ РОЗШИРЕННЯ PYTHON C

Перш ніж імпортувати новий модуль, спершу потрібно його скласти.

Це можна зробити, використовуючи пакет Python distutils.
Знадобиться файл, викликаний setup.py для встановлення програми. setup.py файл для модуля виглядає так:

Слайд 12

СТВОРЕННЯ МОДУЛЯ

Тепер, коли є setup.py файл, можна використовувати його для створення модуля розширення

Python C. Краще використовувати віртуальне середовище, щоб уникнути конфліктів із середовищем Python.
Потрібно перейти до папки в терміналі, що містить setup.py та запустити таку команду:
$ python3 setup.py install
Ця команда буде компілювати та встановлювати модуль розширення Python C у поточному каталозі.
Далі можна створювати python file та імпортувати його як стандартний, або ж робити це в інтерпретаторі.

Слайд 13

АНАЛІЗ РЕЗУЛЬТАТІВ

Слайд 14

АНАЛІЗ РЕЗУЛЬТАТІВ

Слайд 15

ВИСНОВКИ

Метою роботи було проектування архітектури та аналіз існуючих способів побудови бібліотек для Python

на C.
В першу чергу була розглянута проблема побудови архітектури модуля на C для Python: основні методи, функції згортки, ініціалізації, структури типу Py {Name} Object. Також в роботі було досліджено, яким чином можна передавати об’єкти Python до коду С та як повертати їх в інтерпретатоp Python.
Розглянуто основні алгоритми для генерації псевдовипадкових чисел. Алгоритм Фішера-Єтса та різні його інтерпретації, за допомогою яких була написана основна функція в модулі.
Проведено аналіз порівняння швидкості роботи реалізованої функції та стандартної. Також порівняння швидкостей в роботі на різномірних масивах. Дослідження показало, що написана функція в деяких випадках прискорюється більш ніж в 20 разів в порівнянні зі стандартною. Це говорить про те, що написання розширень на С для Python є досить доцільним.
Мету було досягнуто. В результаті роботи було реалізоване розширення, яке пришвидшує роботу стандартної функції та дає можливість тасування елементів n-мірних масивів. Реалізовану програмну систему можна використовувати для оптимізації швидкості роботи.
Имя файла: Побудова-бібліотек-для-Python-у-мові-програмування-C.pptx
Количество просмотров: 107
Количество скачиваний: 0