numpy — операції з масивами, сумісні з numpy¶
Підмодуль numpy бібліотеки ulab надає API, сумісний з numpy, побудований навколо n-вимірного типу масиву ndarray. Він реалізує ретельно відібрану підмножину CPython numpy: створення масивів, поелементну математику, зведення та статистику, лінійну алгебру, ШПФ, генерацію випадкових чисел, поліноміальну апроксимацію та базові операції вводу/виводу.
Зазвичай підмодуль імпортується як np
from ulab import numpy as np
a = np.array([1, 2, 3, 4], dtype=np.float)
b = np.linspace(0, 1, num=5)
c = np.dot(a.reshape((2, 2)), a.reshape((2, 2)))
Each dtype argument is one of the integer constants exposed at module
level: numpy.bool, numpy.uint8, numpy.int8, numpy.uint16,
numpy.int16, and numpy.float (the default). The result type ndarray refers to
numpy.ndarray.
Підмодулі¶
клас ndarray — n-вимірний масив¶
ndarray — це n-вимірний контейнер із підтримкою dtype, що є основою numpy / ulab. Дані зберігаються у суцільному блоці, інтерпретацію якого описує невеликий заголовок (dtype, shape, strides, ndim, itemsize). Багато операцій — reshape, transpose, зрізи — лише змінюють цей заголовок і тому виконуються дуже швидко; методи, що виділяють нову пам’ять (copy, flatten, більшість арифметичних операцій), повертають новий щільний масив.
Цей тип також доступний як ulab.ndarray, numpy.ndarray та (на цій сторінці) просто ndarray.
- class numpy.ndarray(values: ndarray | bytes | list | tuple, *, dtype: int = numpy.float)¶
Створити новий
ndarray.- Параметри:
values – Вхідні дані. Або інший
ndarray(який копіюється глибоко, з перетворенням типу, якщоdtypeвідрізняється), або будь-який ітерований об’єкт MicroPython. Вкладені ітерабельні об’єкти створюють багатовимірні масиви; всі внутрішні ітерабельні об’єкти повинні мати однакову довжину, інакше виникаєValueError.dtype – Element type for the new array. One of the type-code integers exposed by
numpy(numpy.bool,numpy.uint8,numpy.int8,numpy.uint16,numpy.int16, andnumpy.float), or adtypeinstance. Defaults tonumpy.float.
Фабрична функція
numpy.arrayє стандартним способом створенняndarray; вона передає виклик цьому конструктору.- byteswap(*, inplace: bool = False) ndarray¶
Swap the byte order of every element. For
uint16,int16, andfloatarrays this reverses the per-element byte order, which is useful when consuming data from peripherals whose endianness does not match the microcontroller’s. For single-byte dtypes (bool,uint8,int8) this is a no-op that returns a view or copy.Якщо
inplaceдорівнюєFalse(за замовчуванням), повертається новийndarray, а оригінал залишається незмінним. ЯкщоinplaceдорівнюєTrue, байтиselfпереставляються на місці та повертається виглядself.
- copy() ndarray¶
Повернути новий щільний, глибокий клон масиву. Клон має власні дані; зміни в ньому не впливають на оригінал.
- flatten(*, order: str = 'C') ndarray¶
Повернути нову одновимірну копію масиву.
- Параметри:
order –
'C'(за замовчуванням) обходить дані у порядку C (останній вісь змінюється найшвидше);'F'обходить у порядку Fortran (перший вісь змінюється найшвидше).
- reshape(shape: int | tuple[int, ...]) ndarray¶
Повернути вигляд масиву з новою формою. Загальна кількість елементів повинна залишатися незмінною, інакше виникає
ValueError. Доступно лише якщоULAB_MAX_DIMS > 1. Еквівалентно присвоєнню значення атрибутуshape.
- sort(*, axis: int | None = -1) None¶
Відсортувати масив на місці.
- Параметри:
axis – Вісь, вздовж якої виконується сортування.
-1(за замовчуванням) сортує вздовж останньої осі;Noneспочатку розгортає масив, а потім сортує.
- tobytes() bytearray¶
Повернути
bytearray, що є псевдонімом базового буфера даних масиву. Записи через поверненийbytearrayзмінюють масив на місці. ВиникаєValueError, якщо масив не є щільним (наприклад, зрізаний вигляд).
- tolist() list¶
Повернути вміст масиву у вигляді (можливо, вкладеного) Python
list. Глибина вкладеності дорівнюєndim.
- transpose() ndarray¶
Повернути транспонований масив (осі у зворотному порядку). Для одновимірних масивів повертає
self. Доступно лише якщоULAB_MAX_DIMS > 1. АтрибутTє скороченням для цього методу.
- dtype: dtype | int¶
Тип даних елементів масиву. Повертає екземпляр
dtype, якщо мікропрограму зібрано з увімкненимULAB_HAS_DTYPE_OBJECT, інакше — базовий однобуквений код типу у вигляді цілого числа.
- flat: flatiter¶
Плаский ітератор, що повертає кожен елемент масиву у порядку C. На відміну від
flatten(), ітеруванняflatне виділяє новий масив.
- shape: tuple[int, ...]¶
Довжини масиву вздовж кожної осі. Присвоєння кортежу до
shapeзмінює форму масиву на місці (еквівалентноreshape()).
- strides: tuple[int, ...]¶
Кількість байтів, на яку потрібно перейти в пам’яті вздовж кожної осі, щоб дістатися до наступного елемента по цій осі.
- T: ndarray¶
Транспонований масив; еквівалентно
transpose().
Підтримувані оператори¶
ndarray instances support the following operators. Binary operators
broadcast their operands following standard numpy broadcasting rules
and follow numpy’s upcasting rules (e.g. uint8 + int8 => int16,
uint16 + int16 => float).
Arithmetic (binary): +, -, *, /, //, %, **.
Reflected (right-hand) operands and the in-place variants
+=, -=, *=, /=, %=, **= are also supported. Both
ndarray-with-ndarray and ndarray-with-scalar forms are
accepted.
Порівняння: ==, !=, <, <=, >, >=. Кожен повертає булевий ndarray транслованої форми.
Bitwise (integer arrays only): &, |, ^. Applying
these to a float array raises TypeError.
Унарні: + (повертає копію), - (заперечення; для беззнакових dtype значення оберненні за модулем \(2^N\)), abs() (поелементне абсолютне значення; для беззнакових dtype повертає копію без обчислень), ~ (побітова інверсія, лише для цілочисельних dtype), len() (повертає довжину першої осі).
Індексування та зрізи: a[i], a[i, j, ...], a[start:stop:step], індексування булевою маскою (a[mask]) та індексування масивом цілих (fancy) — усе підтримується як при читанні, так і при записі.
Ітерування: Ітерування по ndarray повертає підмасиви вздовж першої осі (по одному елементу для 1-вимірних масивів). Використовуйте flat для ітерування по кожному скалярному елементу незалежно від розмірності.
Оператор матричного множення @ не реалізований; натомість використовуйте numpy.dot (np.dot(a, b)).
Оператори зсуву (<<, >>) не реалізовані на рівні операторів. Використовуйте numpy.left_shift та numpy.right_shift для поелементних цілочисельних зсувів.
Створення масивів¶
- numpy.array(values: ndarray | list | tuple, *, dtype: int = float) ndarray¶
Створити новий
ndarrayіз вкладеного ітерабельного об’єкта чисел. Альтернативний еквівалентний конструктор дляnumpy.ndarray.
- numpy.arange(start: int | float, stop: int | float | None = None, step: int | float = 1, *, dtype: int | None = None) ndarray¶
Повернути рівномірно розподілені значення у напіввідкритому інтервалі
[start, stop). Якщо задано лише один позиційний аргумент, він інтерпретується якstopзstart = 0. Якщо dtype не вказано, він визначається з вхідних даних (цілочисельний, якщо всі start, stop, step є цілими числами в межах діапазону).
- numpy.asarray(a: ndarray | list | tuple, *, dtype: int | None = None) ndarray¶
Якщо a вже є
ndarrayіз dtype, що відповідає dtype (або dtype дорівнюєNone), повертає a без змін; інакше створює новий масив (з запрошеним перетворенням dtype). Ітерабельні об’єкти перетворюються так само, як уnumpy.array.
- numpy.concatenate(arrays: tuple, *, axis: int = 0) ndarray¶
З’єднати послідовність
ndarrayвздовж наявної осі axis. Усі вхідні масиви повинні мати однаковий dtype, ndim та форму за всіма осями, крім axis.
- numpy.diag(a: ndarray, *, k: int = 0) ndarray¶
Для двовимірного a повертає одновимірний масив, що містить k-ту діагональ. Для одновимірного a повертає двовимірний квадратний масив із a, розміщеним на k-й діагоналі. k може бути позитивним (вище головної діагоналі) або від’ємним (нижче).
- numpy.empty(shape: int | tuple[int, ...], *, dtype: int = float) ndarray¶
Псевдонім для
zeros; повертає заповнений нулями масив заданої shape та dtype. (ulab не залишає буфер неініціалізованим.)
- numpy.eye(N: int, M: int | None = None, k: int = 0, *, dtype: int = float) ndarray¶
Повернути двовимірний масив N x M (квадратний N x N, якщо M дорівнює
None) з одиницями на k-й діагоналі та нулями в інших місцях.
- numpy.frombuffer(buffer: bytes, *, dtype: int = float, count: int = -1, offset: int = 0) ndarray¶
Інтерпретувати об’єкт, що підтримує протокол буфера, як одновимірний
ndarrayіз заданим dtype. count — кількість елементів для читання (-1читає всі доступні); offset пропускає відповідну кількість байтів на початку буфера.
- numpy.full(shape: int | tuple[int, ...], fill_value: int | float | bool, *, dtype: int = float) ndarray¶
Повернути новий масив заданої shape та dtype з кожним елементом, встановленим у fill_value.
- numpy.linspace(start: float, stop: float, num: int = 50, *, endpoint: bool = True, retstep: bool = False, dtype: int = float) ndarray | tuple[ndarray, float]¶
Return num evenly spaced samples over the closed interval
[start, stop](or half-open if endpoint isFalse). When retstep isTrue, return a tuple(samples, step).
- numpy.logspace(start: float, stop: float, num: int = 50, *, base: float = 10.0, endpoint: bool = True, dtype: int = float) ndarray¶
Повернути num вибірок, рівномірно розподілених у логарифмічному масштабі: результат починається з
base ** startта закінчуєтьсяbase ** stop.
- numpy.meshgrid(*xi: ndarray, indexing: str = 'xy') tuple[ndarray, ...]¶
Повернути кортеж матриць координат із послідовності одновимірних масивів координат. При indexing
'xy'(за замовчуванням) перші два входи трактуються як декартові координати та їхні осі виходу переставляються; при'ij'використовується матричне індексування. Реалізація відповідає еквіваленту NumPy зcopy=Trueтаsparse=False.
Огляд / друк¶
- numpy.get_printoptions() dict¶
Повернути поточні параметри друку масивів у вигляді словника з ключами
thresholdтаedgeitems.
- numpy.set_printoptions(*, threshold: int | None = None, edgeitems: int | None = None) None¶
Встановити параметри друку масивів. threshold — максимальна кількість елементів масиву, що виводяться повністю; edgeitems — кількість елементів, що відображаються на кожному кінці осі при скороченому виведенні масиву.
Порівняння¶
- numpy.clip(a: ndarray | int | float, a_min: ndarray | int | float, a_max: ndarray | int | float) ndarray | int | float¶
Обрізати значення a так, щоб
a_min <= result <= a_max. Еквівалентноmaximum(a_min, minimum(a, a_max)); трансляція слідує тим самим правилам, що йminimum.
- numpy.equal(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | bool¶
Поелементне
x1 == x2; повертає булевийndarray(або скалярbool, якщо обидва входи є скалярами). Надається для сумісності — оператор==для масивів дає той самий результат.
- numpy.not_equal(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | bool¶
Поелементне
x1 != x2; булевий аналогequal.
- numpy.isfinite(x: ndarray | int | float) ndarray | bool¶
Повернути булевий масив (або скаляр), що дорівнює
Trueтам, де вхідне значення є скінченним. Цілочисельні входи завжди є скінченними.
- numpy.isinf(x: ndarray | int | float) ndarray | bool¶
Повернути булевий масив (або скаляр), що дорівнює
Trueтам, де вхідне значення є нескінченним. Цілочисельні входи ніколи не є нескінченними.
- numpy.maximum(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | int | float¶
Поелементний максимум двох масивів / скалярів. Аргументи транслюються разом; якщо dtype відрізняються, результат має підвищений тип.
- numpy.minimum(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | int | float¶
Поелементний мінімум двох масивів / скалярів; аналог
maximum.
Числові зведення¶
- numpy.all(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | bool¶
Перевірити, чи всі елементи вздовж axis мають значення
True. Приaxis=None(за замовчуванням) перевіряється розгорнутий масив і повертається одинbool.
- numpy.any(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | bool¶
Перевірити, чи хоч один елемент вздовж axis має значення
True. Приaxis=Noneперевіряється розгорнутий масив.
- numpy.argmax(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | int¶
Повернути індекс максимального елемента вздовж axis. При
axis=Noneмасив розгортається і повертається одне ціле число.
- numpy.argmin(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | int¶
Повернути індекс мінімального елемента вздовж axis. При
axis=Noneмасив розгортається і повертається одне ціле число.
- numpy.argsort(a: ndarray, *, axis: int = -1) ndarray¶
Повернути
ndarrayбеззнакових цілих індексів, записи якого сортують a у порядку зростання вздовж axis. Вихідний dtype —uint16, тому жодна вісь не може мати більше 65535 елементів.axis=Noneне підтримується.
- numpy.cross(a: ndarray, b: ndarray) ndarray¶
Повернути векторний добуток двох одновимірних масивів довжиною 3.
- numpy.diff(a: ndarray, *, n: int = 1, axis: int = -1) ndarray¶
Повернути n-ту дискретну кінцеву різницю a вздовж axis. n повинно бути в діапазоні
0..9(трафарет диференціювання зберігається вint8); довжина по axis зменшується на n. Ключові словаprependтаappendnumpy не реалізовані.
- numpy.flip(a: ndarray, *, axis: int | None = None) ndarray¶
Повернути новий масив із зміненим на протилежний порядком елементів вздовж axis; при
axis=Noneмасив обертається вздовж кожної осі.
- numpy.max(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | int | float¶
Повернути максимальний елемент вздовж axis. При
axis=None(за замовчуванням) розгорнутий масив зводиться до скаляра. Ключове словоoutnumpy не реалізоване.
- numpy.min(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | int | float¶
Повернути мінімальний елемент вздовж axis; аналог
max.
- numpy.mean(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | float¶
Повернути середнє арифметичне вздовж axis. При
axis=None(за замовчуванням) повертається середнє розгорнутого масиву у виглядіfloat.
- numpy.median(a: ndarray, *, axis: int | None = None) ndarray | float¶
Повернути медіану вздовж axis. При
axis=Noneмасив спочатку розгортається. Вихідний dtype завжди float.
- numpy.roll(a: ndarray, shift: int, *, axis: int | None = None) ndarray¶
Повернути a з елементами, зсунутими (циклічно) на shift позицій. При
axis=None(за замовчуванням) масив спочатку розгортається. Від’ємні зсуви виконуються у протилежному напрямку.
- numpy.sort(a: ndarray, *, axis: int = -1) ndarray¶
Повернути відсортовану копію a вздовж axis за допомогою сортування купою. При
axis=Noneмасив спочатку розгортається. Ключові словаkindтаordernumpy не реалізовані.
Статистика¶
- numpy.bincount(x: ndarray, *, weights: ndarray | None = None, minlength: int | None = None) ndarray¶
Підрахувати кількість входжень кожного значення в одновимірному масиві x цілих невід’ємних чисел. dtype x повинен бути
uint8абоuint16. Якщо задано weights, кожен запис x вносить відповідну йому вагу замість1, а вихідний dtype —float; інакше вихідний dtype —uint16. Якщо задано minlength, вихідний масив має не менше ніж стільки елементів (зайві записи дорівнюють нулю).
Перетворення¶
- numpy.compress(condition: ndarray | list | tuple, a: ndarray, *, axis: int | None = None) ndarray¶
Повернути зрізи a, вибрані вздовж axis за булевим condition. При
axis=Noneвикористовується розгорнутий масив.
- numpy.delete(a: ndarray, indices: int | ndarray | list | tuple | range, *, axis: int | None = None) ndarray¶
Повернути копію a з вилученими записами за indices вздовж axis. При
axis=Noneмасив спочатку розгортається. Від’ємні індекси відраховуються від кінця axis; indices сортується внутрішньо перед видаленням.
Апроксимація¶
- numpy.interp(x: ndarray, xp: ndarray, fp: ndarray, *, left: float | None = None, right: float | None = None) ndarray¶
Одновимірна лінійна інтерполяція. xp повинен бути монотонно зростаючим одновимірним масивом незалежних значень; fp містить відповідні залежні значення; x — точки, у яких обчислюється інтерполянт. left та right замінюють значення, що повертається при
x < xp[0]таx > xp[-1]відповідно (за замовчуванням:fp[0]таfp[-1]).
Вибірка¶
- numpy.take(a: ndarray, indices: ndarray | list | tuple, *, axis: int | None = None, out: ndarray | None = None, mode: str | None = None) ndarray¶
Взяти елементи з a за заданими indices вздовж axis. При
axis=Noneвикористовується розгорнутий масив. mode визначає поведінку при виході за межі:"raise"(за замовчуванням — викинутиValueError),"wrap"(за модулем довжини осі) або"clip"(обрізати до допустимого діапазону; від’ємні індекси не дозволяються). Якщо задано out, результат записується в нього.
Побітові операції¶
- numpy.bitwise_and(x1: ndarray, x2: ndarray) ndarray¶
Поелементне побітове І двох цілочисельних масивів; трансляція підтримується. Нецілочисельний dtype викликає виключення.
- numpy.bitwise_or(x1: ndarray, x2: ndarray) ndarray¶
Поелементне побітове АБО двох цілочисельних масивів.
- numpy.bitwise_xor(x1: ndarray, x2: ndarray) ndarray¶
Поелементне побітове XOR двох цілочисельних масивів.
Фільтрація¶
Поліноміальні операції¶
- numpy.polyfit(y: ndarray | list | tuple, deg: int) ndarray
Апроксимувати поліном ступеня deg до точок даних
(x, y)методом найменших квадратів та повернути коефіцієнти полінома (від найвищого ступеня). Якщо x не задано, використовуєтьсяrange(len(y)). ВиникаєValueError, якщо довжини x та y різняться.
Введення/виведення¶
- numpy.load(file: str) ndarray¶
Зчитати масив, раніше збережений за допомогою
save, з file (платформонезалежний формат numpy.npy). Порядок байтів перетворюється на льоту, якщо порядок байтів файлу відрізняється від порядку байтів хоста.
- numpy.loadtxt(file: str, *, delimiter: str | None = None, comments: str = '#', max_rows: int = -1, usecols: int | ndarray | list | tuple | None = None, dtype: int = float, skiprows: int = 0) ndarray¶
Зчитати числові дані з текстового file та повернути їх як
ndarray. delimiter за замовчуванням — пробільні символи; comments — маркер рядкового коментаря; max_rows обмежує кількість зчитуваних рядків даних (-1— усі); usecols вибирає стовпці за індексом; skiprows пропускає відповідну кількість початкових рядків. Якщо dtype не є float, значення перетворюються шляхом округлення.
- numpy.save(file: str, a: ndarray) None¶
Зберегти a у file у платформонезалежному форматі numpy
.npy.
- numpy.savetxt(file: str, a: ndarray, *, delimiter: str = ' ', header: str | None = None, footer: str | None = None, comments: str = '# ') None¶
Записати a у file у текстовому форматі. delimiter розділяє значення в рядку; header та footer, якщо вказані, записуються до/після даних, кожне з префіксом comments. Значення записуються у форматі числа з плаваючою крапкою.
Універсальні функції¶
Поелементні математичні функції. Кожна приймає скаляр або ndarray і повертає результат відповідної форми (скаляр float для скалярного входу, ndarray для масивного входу). При виклику з ndarray результат — новий ndarray з плаваючою крапкою; необов’язкове ключове слово out може бути передано для запису результату в попередньо виділений float ndarray такого самого розміру.
- numpy.acos(x: ndarray | float, /) ndarray | float¶
Обчислити зворотний косинус (арккосинус) кожного елемента x; результат — у радіанах.
- numpy.acosh(x: ndarray | float, /) ndarray | float¶
Обчислити зворотний гіперболічний косинус кожного елемента x.
- numpy.arctan2(y: ndarray | float, x: ndarray | float, /) ndarray | float¶
Обчислити двоаргументний зворотний тангенс
atan2(y, x)поелементно; підтримує трансляцію між двома входами.
- numpy.around(x: ndarray, /, decimals: int = 0) ndarray¶
Округлити елементи
ndarrayx до заданої кількості decimals знаків після коми; перший аргумент повинен бутиndarray.
- numpy.asin(x: ndarray | float, /) ndarray | float¶
Обчислити зворотний синус (арксинус) кожного елемента x; результат — у радіанах.
- numpy.asinh(x: ndarray | float, /) ndarray | float¶
Обчислити зворотний гіперболічний синус кожного елемента x.
- numpy.atan(x: ndarray | float, /) ndarray | float¶
Обчислити зворотний тангенс (арктангенс) кожного елемента x; результат — у радіанах.
- numpy.atanh(x: ndarray | float, /) ndarray | float¶
Обчислити зворотний гіперболічний тангенс кожного елемента x.
- numpy.ceil(x: ndarray | float, /) ndarray | float¶
Обчислити стелю (найменше ціле число, не менше значення) кожного елемента x.
- numpy.cos(x: ndarray | float, /) ndarray | float¶
Обчислити косинус кожного елемента x (у радіанах).
- numpy.cosh(x: ndarray | float, /) ndarray | float¶
Обчислити гіперболічний косинус кожного елемента x.
- numpy.degrees(x: ndarray | float, /) ndarray | float¶
Перетворити кожен елемент x з радіанів у градуси.
- numpy.exp(x: ndarray | float, /) ndarray | float¶
Compute the exponential
e**xof each element of x.
- numpy.expm1(x: ndarray | float, /) ndarray | float¶
Обчислити
exp(x) - 1кожного елемента x з покращеною точністю поблизу нуля.
- numpy.floor(x: ndarray | float, /) ndarray | float¶
Обчислити підлогу (найбільше ціле число, не більше значення) кожного елемента x.
- numpy.log(x: ndarray | float, /) ndarray | float¶
Обчислити натуральний логарифм кожного елемента x.
- numpy.log10(x: ndarray | float, /) ndarray | float¶
Обчислити логарифм за основою 10 кожного елемента x.
- numpy.log2(x: ndarray | float, /) ndarray | float¶
Обчислити логарифм за основою 2 кожного елемента x.
- numpy.radians(x: ndarray | float, /) ndarray | float¶
Перетворити кожен елемент x з градусів у радіани.
- numpy.sinc(x: ndarray | float, /) ndarray | float¶
Обчислити нормовану функцію sinc
sin(pi*x) / (pi*x)кожного елемента x.
- numpy.sinh(x: ndarray | float, /) ndarray | float¶
Обчислити гіперболічний синус кожного елемента x.
- numpy.sqrt(x: ndarray | float, /, *, dtype: int = float) ndarray | float¶
Compute the square root of each element of x.
- numpy.tan(x: ndarray | float, /) ndarray | float¶
Обчислити тангенс кожного елемента x (у радіанах).