NumPy, сокращение от Numerical Python, представляет собой библиотеку Python, в которую добавлена ​​поддержка больших многомерных массивов и матриц, а также большая коллекция высокоуровневых математических функций для работы с этими массивами. NumPy — одна из основных библиотек, используемых в науке о данных и машинном обучении, поскольку она предоставляет мощный набор инструментов для обработки данных, анализа и вычислений.

Массивы в NumPy похожи на списки в Python, но более эффективны и мощны для числовых операций. Вот некоторые ключевые функции массивов NumPy:

  • Однородный: все элементы в массиве NumPy должны иметь один и тот же тип данных, который указывается при создании массива.
  • Фиксированный размер. Размер массива NumPy фиксируется при его создании и не может быть изменен.
  • Многомерность: массивы NumPy могут иметь любое количество измерений, от одного до многих.

Другая причина, по которой массивы NumPy работают быстрее, чем списки, — хранение данных в заразной памяти.

Приложения NumPy

  • Математика (замена MATLAB)
  • Графика (Matplotlib)
  • Серверная часть (Pandas, Connect 4, цифровая фотография, обработка изображений)
  • Машинное обучение

Начало работы с NumPy

Чтобы использовать NumPy в коде Python, сначала необходимо установить его. Вы можете сделать это с помощью pip, менеджера пакетов Python, выполнив следующую команду:

pip install numpy

Этот оператор создает псевдоним "np" для библиотеки NumPy, что упрощает ее использование в вашем коде.

Давайте рассмотрим несколько примеров того, как использовать NumPy для задач науки о данных.

Создание и проверка массива NumPy

Вы можете создавать массивы NumPy, используя различные функции, предоставляемые библиотекой. Вот несколько примеров:

a = np.array([1,2,3])
print(a)

output: 
[1 2 3]
b = np.array([[9.0,8.0,7.0],[6.0,5.0,4.0]])
print(b)

output:
[[9. 8. 7.]
 [6. 5. 4.]]
# Get Dimension of a array
print(a.ndim)
print(b.ndim)
output:
1
2
# Get Shape
b.shape
output:
(2, 3)
# Get Type
a.dtype
output:
dtype('int32')
# Get Size
print(a.itemsize)

# Get total size
print(a.nbytes)

# Get number of elements
print(a.size)

# Get the lenght of array
len(a)

# Get the name of the datatype
a.dtype.name

# Convert an array to different data type
b.astype(int) 

output:
4
12
3

Начальные заполнители

1. Create a 3x5 array filled with zeros.
2. Create a 2x2 array filled with ones.
3. Create an array of values from 10 to 25 (excluding 25) with a step of 5.
4. Create an array of 9 evenly spaced values between 0 and 2.
5. Create a 2x2 array filled with the value 7.
6. Create a 2x2 identity matrix.
7. Create a 2x2 array with random values between 0 and 1.
8. Create a 3x2 array without initializing its entries.

np.zeros((3,5))
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

np.ones((2,2))
array([[1., 1.],
       [1., 1.]])

np.arange(10,25,5)
array([10, 15, 20])

np.linspace(0,2,9)
array([0.  , 0.25, 0.5 , 0.75, 1.  , 1.25, 1.5 , 1.75, 2.  ])

np.full((2,2),7)
array([[7, 7],
       [7, 7]])

np.eye(2)
array([[1., 0.],
       [0., 1.]])
np.random.random((2,2))
array([[0.02947711, 0.95214664],
       [0.64457076, 0.64514743]])

np.empty((3,2))
array([[9., 8.],
       [7., 6.],
       [5., 4.]])

Типы данных

np.int32: Signed 32-bit integer type
np.uint64: Unsigned 64-bit integer type
np.float64: Double-precision floating point
np.complex128: Complex number represented by two 64-bit floats
np.bool: Boolean type storing True and False values
np.object: Python object type
np.string_: Fixed-length string type
np.unicode_: Fixed-length unicode type

Подмножество, нарезка и индексация

a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
print(a) 
[[ 1  2  3  4  5  6  7]
 [ 8  9 10 11 12 13 14]]

# Get a specific element [r, c]
a[1, 5]
13

# Get a specific row 
a[0, :]
array([1, 2, 3, 4, 5, 6, 7])

# Getting a little more fancy [startindex:endindex:stepsize]
a[0, 1:-1:2]
array([2, 4, 6])

#updating an elemn
a[1,5] = 20
a[:,2] = [1,2]
print(a)
[[ 1  2  5  4  5  6  7]
 [ 8  9  5 11 12 20 14]]
[[ 1  2  1  4  5  6  7]
 [ 8  9  2 11 12 20 14]]

Математика массивов

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

np.add(a, b)            # Output: array([5, 7, 9])
np.subtract(a, b)       # Output: array([-3, -3, -3])
np.multiply(a, b)       # Output: array([4, 10, 18])
np.divide(a, b)         # Output: array([0.25, 0.4 , 0.5 ])
np.power(a, b)          # Output: array([  1,  32, 729])
np.sqrt(a)              # Output: array([1.        , 1.41421356, 1.73205081])
np.exp(a)            # Output: array([ 2.71828183,  7.3890561 , 20.08553692])
np.sin(a)            # Output: array([0.84147098, 0.90929743, 0.14112001])
np.cos(a)            # Output: array([ 0.54030231, -0.41614684, -0.9899925 ])
np.log(a)            # Output: array([0.        , 0.69314718, 1.09861229])

Note: you are also allowed to use mathematical symbols directly like +, -, * etc.

Линейная алгебра

# For Matrix Multiplction
np.matmul(a,b)

# Find the determinant
c = np.identity(3)
np.linalg.det(c)   #output: 1

Справочные документы для операций линейной алгебры:

https://docs.scipy.org/doc/numpy/reference/routines.linalg.html

  • определитель
  • След
  • Сингулярное векторное разложение
  • собственные значения
  • Матричная норма
  • Инверсия и др.

Статистика

np.mean(arr)           Compute the arithmetic mean along a specified axis.
np.median(arr)         Compute the median along a specified axis.
np.std(arr)            Compute the standard deviation along a specified axis.
np.var(arr)            Compute the variance along a specified axis.
np.max(arr)            Find the maximum value along a specified axis.
np.min(arr)            Find the minimum value along a specified axis.
np.sum(arr)            Compute the sum of all elements along a specified axis.
np.prod(arr)           Compute the product of all elements along a specified axis.
np.percentile(arr, q)  Compute the q-th percentile of the data along a specified axis.
np.corrcoef(arr)       Compute the correlation matrix of a 2D array.
np.cov(arr)            Estimate a covariance matrix of a 2D array.

Реорганизация массивов

before = np.array([[1,2,3,4],[5,6,7,8]])
print(before)

after = before.reshape((2,3))
print(after)          

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

[[1 2]
 [3 4]
 [5 6]
 [7 8]]
# Vertically stacking vectors
v1 = np.array([1,2,3,4])
v2 = np.array([5,6,7,8])

np.vstack([v1,v2,v1,v2])
array([[1, 2, 3, 4],
       [5, 6, 7, 8],
       [1, 2, 3, 4],
       [5, 6, 7, 8]])


# Horizontal  stack
h1 = np.ones((2,4))
h2 = np.zeros((2,2))

np.hstack((h1,h2))
array([[1., 1., 1., 1., 0., 0.],
       [1., 1., 1., 1., 0., 0.]])

Манипуляции с массивами

# To take the transpose of an array
np.transpose(a)

# Adding/removing elements
np.append(h,g)
np.insert(a, 1, 5)
np.delete(a, [1])

# Combining arrays
np.concatenate(a,b)

# Sorting arrays
a.sort()

# Copying arrays
np.copy(a)

Важная заметка

Я работаю над #100daysofMLCode, где я начинаю с начального уровня, я буду публиковать еженедельный контент или больше через неделю в виде crux. Если вы новичок и хотите улучшить свои знания в области науки о данных наряду с практической реализацией, мы можем связаться через LinkedIn, GitHub и Medium здесь.

LinkedIn

Вот мой профиль LinkedIn на случай, если вы захотите связаться со мной. Я буду счастлив быть связанным с вами.

Заключительные слова

Спасибо за чтение. Если вам понравился этот пост, пожалуйста, нажмите кнопку хлопка и поделитесь им с друзьями. Кроме того, я буду рад услышать ваши отзывы. Если вы хотите получать уведомления, когда я создаю новую запись в блоге, вы также можете подписаться на меня в моей учетной записи GitHub.