Python Урок по NumPy за начинаещи

⚡ Умно обобщение

NumPy е основополагащият Python библиотека за числени изчисления, захранване на масиви, матрици, линейна алгебра и случайно вземане на проби. Този урок за NumPy ви превежда през инсталирането, създаването на масиви, преобразуването...ping, нарязване, статистика и матрична математика с runnable Python примери.

  • Основна употреба: Бързи N-мерни масиви и векторизирана математика в Python.
  • Основни функции: нули, единици, преобразуване, hstack, точка, linspace.
  • ???? Foundations: Линейна алгебра, радиоразпръскване, статистика, нарязване.
  • ???? Сегашна версия: NumPy 2.x (издаден през юни 2024 г.) вече е стабилен.
  • 🤖 Използване на изкуствен интелект: Гръбнакът на PyTorch, TensorFlow, JAX и CuPy тензори.

Python Урок за NumPy

В какво е NumPy Python?

numpy е с отворен код Python библиотека за математическо, научно, инженерно и програмиране, свързано с наука за данни. Това е много полезна библиотека за математически и статистически операции в PythonРаботи перфектно с многомерни масиви и умножение на матрици и се интегрира лесно с C/C++ намлява Fortran.

За всеки научен проект, NumPy е инструментът, който трябва да знаете. Той е създаден за N-мерни масиви, линейна алгебра, генериране на случайни числа, преобразувания на Фурие и други.

NumPy дава Python първокласна поддръжка за многомерни масиви и матрици, плюс голям набор от математически операции, които действат върху тях. В това ръководство ще разгледаме основните функции, които трябва да знаете, преди да преминем към урока по „TensorFlow-

Защо да използвате NumPy?

NumPy е ефективен по отношение на паметта, така че може да обработва големи обеми от числови данни по-лесно от чистия език. Python списъци. Също така е много удобно за умножение на матрици и преобразуванеping, и е бърз, защото тежката работа е делегирана на компилирани C рутини. Всъщност, библиотеки като TensorFlow, PyTorch и Scikit-learn разчитат на NumPy масиви за матрични изчисления в back-end системата си, което прави 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

Потребителите на Pip могат да инсталират или надстроят с една команда:

pip install --upgrade numpy

Импортирайте NumPy и проверете версията

Командата за импортиране на numpy е:

import numpy as np

Горният ред преименува пространството от имена NumPy на npТози пряк път ви позволява да добавяте префикс към функции, методи и атрибути на NumPy с np. вместо „ти“ping numpy.и това е стандартната конвенция, която ще намерите в екосистемата на NumPy.

За да проверите инсталираната версия на NumPy, използвайте командата по-долу:

print(np.__version__)

Изход:

2.1.3

NumPy 2.0 беше пуснат през юни 2024 г. и е текущата стабилна основна серия. Ако вашият проект все още зависи от 1.x API, закачете го към numpy<2 във вашия файл с изисквания, защото някои остарели псевдоними, като например np.float бяха премахнати във версия 2.0.

Какво е Python NumPy масив?

Масивите в NumPy изглеждат малко като Python списъци на пръв поглед, но се държат много различно. За читателите, които са нови в темата, нека изясним какво е ndarray и защо е важен.

Както подсказва името, масивът NumPy е централната структура от данни на библиотеката NumPy. Самото име е съкращение от „Numeric Python” или „Числен Python”, а ndarray е хомогенен блок памет с фиксиран размер, с известна форма и тип данни.

Създаване на масив NumPy

Най-лесният начин за създаване на масив в NumPy е да се започне от Python списък.

myPythonList = [1,9,8,3]

Конвертиране на Python списък към масив от NumPy, използвайки np.array.

numpy_array_from_list = np.array(myPythonList)

Покажете съдържанието на масива.

numpy_array_from_list

Изход:

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

На практика не е необходимо да се декларира a Python списък първо. Двете стъпки могат да бъдат комбинирани.

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

ЗАБЕЛЕЖКА: Документацията на NumPy също споменава np.ndarray, Но np.array е препоръчителната фабрична функция за ежедневна употреба.

Можете също да създадете NumPy масив от кортеж по същия начин.

математически Operaции на масив

Можете да извършвате математически операции като събиране, извличанеtracция, деление и умножение върху масив. Синтаксисът е името на масива, последвано от оператора (+, -, *, /), последвано от операнда. Тези операции са векторизирани, което означава, че NumPy ги прилага към всеки елемент без изрично указание Python контур.

Пример:

numpy_array_from_list + 10

Изход:

array([11, 19, 18, 13])

Тази операция добавя 10 към всеки елемент от масива NumPy.

Форма на масив

Можете да проверите формата на масив с shape атрибут, достъпен чрез добавянето му към името на масива. По същия начин можете да проверите типа с dtype.

import numpy as np
a = np.array([1,2,3])
print(a.shape)
print(a.dtype)

(3,)
int64

Цялото число е стойност без десетична точка. Ако създадете масив с десетични числа, типът данни се променя на float.

#### 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)
Цел Code
Създаване на масив масив ([1,2,3])
отпечатайте формата масив([.]).форма

Какво е numpy.zeros()?

numpy.zeros() or np.zeros е Python функция, използвана за създаване на матрица, запълнена с нули. numpy.zeros() е полезно, когато трябва да инициализирате тегла по време на първата итерация в TensorFlow или да настроите буфери-заместители за други статистически задачи.

Синтаксис на функцията numpy.zeros().

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

Python numpy.zeros() Параметри

Тук

  • Форма: формата на нулевия масив NumPy.
  • Dtype: тип данни на елементите. Не е задължителен, а стойността по подразбиране е float64.
  • Поръчка: по подразбиране е C, което е оформлението по основни редове, използвано от numpy.zeros() in Python.

Python numpy.zeros() Пример

import numpy as np
np.zeros((2,2))

Изход:

array([[0., 0.],
          [0., 0.]])

Пример за numpy нула с Datatype

import numpy as np
np.zeros((2,2), dtype=np.int16)

Изход:

array([[0, 0],
         [0, 0]], dtype=int16)

Какво е numpy.ones()?

функция np.ones(). създава матрица, запълнена с единици. numpy.ones() in Python е полезно, когато инициализирате тегла по време на първата итерация в TensorFlow и за други статистически задачи.

Python numpy.ones() Синтаксис

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

Python numpy.ones() Параметри

Тук

  • Форма: форма на np.ones Python Array.
  • Dtype: тип данни на елементите. Не е задължителен, а стойността по подразбиране е float64.
  • Поръчка: по подразбиране е C, което е оформлението по основни редове.

Python numpy.ones() 2D масив с пример за тип данни

import numpy as np
np.ones((1,2,3), dtype=np.int16)

Изход:

array([[[1, 1, 1],
       [1, 1, 1]]], dtype=int16)

numpy.reshape() функция в Python

Python Преоформяне на NumPy променя формата на масив, без да променя данните му. Може да се наложи да промените формата на данните от широк към дълъг формат или да преминете от 1D вектор към 2D матрица, преди да ги подадете към модел. np.reshape Функцията обработва това с едно извикване.

Синтаксис на np.reshape()

numpy.reshape(a, newShape, order='C')

Тук

a: масив, който искате да преоформите.

нова форма: новата желана форма.

Поръчка: по подразбиране е C, оформлението по основни редове.

Пример за NumPy Reshape

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

Python NumPy Flatten връща копие на масива, свит в едно измерение. Когато работите с невронни мрежи като convnets, често се налага да изравните тензора на изображението, преди да го предадете на плътен слой. np.flatten() Функцията обработва това с едно извикване.

Синтаксис на np.flatten()

numpy.flatten(order='C')

Тук
Поръчка: по подразбиране е C, оформлението по основни редове.

Пример за NumPy Flatten

e.flatten()

Изход:

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

В какво е numpy.hstack(). Python?

numpy.hstack е Python функция, използвана за хоризонтално подреждане на последователности от входни масиви в един масив. С hstack(), добавяте данни по оста на колоната. Това е много удобен помощник в NumPy, когато трябва да обедините вектори на характеристики един до друг.

Нека да учим hstack in Python с пример.

Пример:

## Horizontal 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(). Python?

numpy.vstack е Python функция, използвана за вертикално подреждане на последователности от входни масиви в един масив. С 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.

Генериране на случаен принцип Numbers използвайки NumPy

За генериране на случайни числа от Гаусово разпределение, използвайте:

numpy.random.normal(loc, scale, size)

Тук

  • Място: средната стойност. Центърът на разпределението.
  • Мащаб: стандартното отклонение.
  • Размер: брой върнати проби.

Пример:

## Generate random numbers from a 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]

Ако се изобрази графично, разпределението е подобно на следния график.

Пример за генериране на случаен принцип Numbers използвайки NumPy
Пример за генериране на случаен принцип Numbers използвайки NumPy

Обърнете внимание, че по-новият код все по-често използва съвременния API на генератора, np.random.default_rng(), което е препоръчителният заместител на наследството np.random.normal извиквания в NumPy 2.x.

Функция NumPy Asarray

- asarray() Функцията преобразува входните данни в масив. Входните данни могат да бъдат списък, кортеж, ndarray или подобна последователност.

Синтаксис:

numpy.asarray(data, dtype=None, order=None)

Тук

данни: данни, които искате да конвертирате в масив.

dtype: незадължително. Ако не е посочен, типът данни се извежда от входните данни.

Поръчка: по подразбиране е C, оформлението по редове. Другият вариант е F (Fortraколона-голяма в стил n).

Пример:

Да разгледаме следната двумерна матрица с четири реда и четири колони, запълнена с 1.

import numpy as np
A = np.matrix(np.ones((4,4)))

Ако се опитате да промените стойност в матрицата чрез np.array, оригиналът не е променен. Причината е, че np.array създава копие на матрицата.

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)

Code Обяснение:

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() in Python.

Синтаксис:

numpy.arange(start, stop, step, dtype)

Python Параметри за подреждане на NumPy:

  • Начало: начало на интервала за np.arange in Python.
  • Спиранекрай на интервала.
  • Стъпка: разстояние между стойностите. Стъпката по подразбиране е 1.
  • Dtype: тип на изходния масив за NumPy arange.

Пример:

import numpy as np
np.arange(1, 11)

Изход:

array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

Пример:

За да промените стъпката в този NumPy arange Например, добавете трето число в скобите. Това променя размера на стъпката.

import numpy as np
np.arange(1, 14, 4)

Изход:

array([ 1,  5,  9, 13])

Функция NumPy Linspace

linspace връща равномерно разположени семпли между две крайни точки.

Синтаксис:

numpy.linspace(start, stop, num, endpoint)

Тук

  • Начало: начална стойност на последователността.
  • Спиране: крайна стойност на последователността.
  • В: брой семпли за генериране. Стойността по подразбиране е 50.
  • Endpoint: ако True (по подразбиране), stop е последната стойност. Ако False, stop не е включен.

Пример:

Например, може да се използва за създаване на 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.        ])

Ако не искате да включвате последната цифра в интервала, задайте endpoint да се False.

np.linspace(1.0, 5.0, num=5, endpoint=False)

Изход:

array([1. , 1.8, 2.6, 3.4, 4.2])

LogSpace NumPy функция в Python

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.        ])

Накрая, ако искате да проверите размера на паметта на един елемент в масив, можете да използвате itemsize.

x = np.array([1,2,3], dtype=np.complex128)
x.itemsize

Изход:

16

Всеки елемент отнема 16 байта.

Индексиране и нарязване Python

Разделянето на данни е лесно с NumPy. Ще разрежем матрицата e. В Python, използвате квадратни скоби, за да върнете редове или колони.
Пример:

## 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 row
print('First row:', e[0])

## Second row
print('Second row:', e[1])

Изход:

First row: [1 2 3]
Second row: [4 5 6]

In Python, както и в много други езици,

  • Стойността преди запетаята представлява редовете.
  • Стойността след запетаята представлява колоните.
  • Ако искате да изберете колона, добавете : преди индекса на колоната.
  • : означава, че искате всички редове от избраната колона.
print('Second column:', e[:,1])
Second column: [2 5]

За да върнете първите две стойности от втория ред, използвайте : за да изберете всички колони до втория индекс.

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

Статистически функции в Python

NumPy предоставя полезен набор от статистически функции за намиране на минимум, максимум, процентил, стандартно отклонение, дисперсия и други от даден масив. Най-често срещаните са изброени по-долу.

NumPy се доставя с надеждни статистически помощници, обобщени в таблицата.

функция numpy
Min np.min()
макс np.max()
Означава np.mean()
Медиана np.медиана()
Стандартно отклонение np.std()

Разгледайте следния масив:

Пример:

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и обработва както 1D, така и 2D масиви. За 2D входове извършва умножение на матрици.

Синтаксис:

numpy.dot(x, y, out=None)

параметри

Тук

x, yвходни масиви. x намлява y и двете трябва да са 1D или 2D за np.dot() да работи като скаларно произведение или матрично умножение.

от: незадължителен изходен аргумент, използван за заснемане на резултата. В противен случай се връща ndarray.

Връщане

Функцията numpy.dot() връща скаларното произведение на два масива x намлява yВръща скалар, когато и двете са 1D, в противен случай връща масив. Ако out е даден, този масив се връща.

Рейзовете

Скаларното произведение в 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

Матрично умножение в Python

NumPy matmul() Функцията връща матричното произведение на два масива. Ето как работи.

1) За 2D масиви, връща нормалното матрично произведение.

2) За размерности по-големи от 2, произведението се третира като стек от матрици.

3) Едноизмерен масив първо се преобразува в матрица, след което се изчислява произведението.

Инфиксът @ оператор, наличен от Python 3.5 е съкращение за matmul и се използва широко в съвременния код.

Синтаксис:

numpy.matmul(x, y, out=None)

Тук

x, y: входни масиви. Скаларни числа не са разрешени.

от: незадължителен параметър. Обикновено резултатът се съхранява в ndarray.

Пример:

По същия начин можете да изчислите умножение на матрици с np.matmul.

### Matmul: matrix 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*6
np.linalg.det(i)

Изход:

-2.000000000000005

Обяснение на NumPy Broadcasting

Разпространението е правило, което позволява на NumPy да извършва аритметични действия върху масиви с различни форми, без да копира данни. Когато добавите скалар към 1D вектор или 1D вектор към 2D матрица, NumPy разтяга по-малкия операнд по липсващите оси, така че формите да се подравнят. Това избягва изричното... Python цикли и е една от основните причини, поради които кодът на NumPy изглежда бърз и сбит.

Две форми са съвместими за излъчване, когато, сравнени отдясно наляво, всяка двойка измерения е или равна, или едно от тях е равно на 1. Например, матрица от форми (3, 4) излъчвания срещу ред от форма (4,) или колона с форма (3, 1)Същата логика захранва нормализацията в машинното обучение, където подчиняватеtracвектор на средните стойности за всяка характеристика от партида от проби в един ред. Разпространението е и концептуален модел, използван от тензорни библиотеки като PyTorch, TensorFlow и JAX, така че правилата, които научавате тук, се прехвърлят директно в GPU кода.

Как NumPy захранва изкуствения интелект и машинното обучение

NumPy е в основата на почти всеки модерен Python AI стек. PyTorch тензорите, TensorFlow eager тензорите и JAX масивите предоставят едни и същи функции за излъчване, нарязване и преобразуване.ping API, който сте научили в NumPy ndarrays. Много уроци все още подават предварително обработени NumPy масиви в цикли за обучение на модели, а фреймворците ги приемат без нулева конверсия.

Три конкретни модела показват как NumPy се свързва с изкуствения интелект днес. Първо, инженерите по данни оформят суровите характеристики в NumPy масиви, преди да ги предадат на scikit-learn конвейери или на Hugging Face набори от данни. Второ, изследователите използват NumPy като базова линия на процесора и след това ги заместват с CuPy, който предоставя почти идентичен API, но работи на NVIDIA графични процесори чрез CUDA. Трето, JAX надгражда върху NumPy API, за да добави автоматична диференциация и компилация „точно навреме“, така че същият код, който работи на лаптопа, може да работи на TPU в облака. Изводът е, че уменията за работа с масиви, които изграждате с NumPy, се отнасят до всеки основен инструментариум за дълбоко обучение, което прави този урок полезна стъпка по пътя към разработването на изкуствен интелект.

Въпроси и Отговори

NumPy предоставя бързи N-мерни масиви, векторизирана математика, линейна алгебра, случайно вземане на проби и преобразувания на Фурие. Инженерите и с��ециалистите по обработка на данни го използват за числени изчисления, обработка на изображения и сигнали, статистика и като основа за масиви за библиотеки от по-високо ниво, като pandas, scikit-learn и SciPy.

Масивът NumPy съхранява елементи от един фиксиран тип данни в съседен блок памет, което прави векторизираната математика бърза. Python Списъците съдържат произволни обекти, поддържат смесени типове и разчитат на по-бавни цикли за всеки елемент, така че са гъвкави, но далеч по-малко ефективни за големи числени натоварвания.

NumPy 2.0, издаден през юни 2024 г., поддържа основния API на масивите стабилен, но премахва отдавна остарели псевдоними, като например np.float намлява np.intи затяга правилата за повишаване на типове. Повечето производствен код се нуждае само от малки редакции. Закачи numpy<2 ако зависимостта все още не е актуализирана.

PyTorch и TensorFlow моделират своите тензорни обекти върху NumPy масиви. Те споделят една и съща семантика на форма, излъчване и нарязване и двата приемат NumPy масиви като вход. Уменията, придобити с NumPy, се пренасят директно в изграждането на невронни мрежи, обучителни цикли и конвейери за предварителна обработка на тензори.

Стандартният NumPy работи на процесора. За ускорение на графичния процесор (GPU) използвайте CuPy, който отразява NumPy API на NVIDIA CUDA устройства, или JAX, който добавя автоматично разграничаване (autodiff) и компилация „just-in-time“ за графични процесори (GPU) и процесори (TPU). И двата варианта ви позволяват да използвате повторно по-голямата част от съществуващия NumPy код с минимални пренаписвания за AI натоварвания.

Anaconda предоставя NumPy по подразбиране. В противен случай, изпълнете pip install numpy or conda install -c anaconda numpyЗа да надстроите съществуваща инсталация до NumPy 2.x, изпълнете pip install --upgrade numpyПроверете активната версия с print(np.__version__) вътре Python.

Разпространението позволява на NumPy да работи с масиви с различна форма, без да копира данни. По-малкият масив се разтяга виртуално, за да съответства на по-големия, когато размерите са съвместими. Това осигурява кратки изрази за нормализиране, мащабиране и проектиране на функции в конвейери за машинно обучение.

Обобщете тази публикация с: