NumPy поддерживает большое количество операций с размерными массивами и матрицами и является библиотекой Python для операций с массивами.
Эта статья включена вСерия предварительных руководств по машинному обучению.
1. Основы Python
Начнем с закрепления основ Python. Python имеет 6 стандартных типов данных: Number (число), String (строка),List(список), Tuple (кортеж), Set (коллекция), Dictionary (словарь).
в:
Неизменяемые данные: Number (число), String (строка), Tuple (кортеж).
Переменные данные: List (список), Dictionary (словарь), Set (коллекция).
1. Список[список]
список в квадратных скобках[ ]
Пакет, стоимость каждой позиции переменная.
list = [1, 2, 3, 4, 5, 6]
Возьмите значение в соответствии с позицией, например, принимая значение второй позиции:
list[1]
получить2
.
Берем значения с позиции 3, ко всем значениям в конце списка:
a[2:]
получить[3, 4, 5, 6]
.
Измените значение в указанной позиции:
list[0] = 9
Список a теперь выводится как[9, 2, 3, 4, 5, 6]
.
2. Кортеж
Кортежи заключены в круглые скобки( )
пакет, числовое значение для каждой позициинеизменный. разрешить данныеповторение.
tuple = ('a', 'a, 'c', 1, 2, 3.0)
вывод('a', 'a', 'c', 1, 2, 3.0)
.
Возьмите элемент в последней позиции:
tuple[-1]
вывод3.0
.
Работа с кортежем аналогична списку, но значение элементов в кортеже нельзя изменить, иначе будет сообщено об ошибке.
tuple[2] = 'caiyongji'
3. Набор {коллекция}
набор содержитНе повторяетсясовокупность элементов, заключенных в фигурные скобки{ }
пакет.
set1 = {'a','b','c','a'}
set2 = {'b','c','d','e'}
Вывод set1:{'a', 'b', 'c'}
.Примечание. Коллекции удаляют повторяющиеся элементы.
Вывод set2:{'b', 'c', 'd', 'e'}
.
В отличие от списков и кортежей, наборы не могут быть подписаны, например:
set1[0]
Далее рассмотрим операции над множествами.
набор1 и набор2разница:
set1 - set2
#set1.difference(set2)
вывод:{'a'}
.
набор1 и набор2союз:
set1 | set2
#set1.union(set2)
вывод:{'a', 'b', 'c', 'd', 'e'}
.
набор1 и набор2перекресток:
set1 & set2
#set1.intersection(set2)
вывод:{'b', 'c'}
.
набор1 и набор2Симметричная разница:
set1 ^ set2
#(set1 - set2) | (set2 - set1)
#set1.symmetric_difference(set2)
вывод:{'a', 'd', 'e'}
.
Вышеупомянутые различия, объединения, пересечения и симметричные различия имеют соответствующие методы набора, вы можете аннотировать методы и попробовать их самостоятельно.
4. Словарь{словарь:Словарь}
Словарь — это отношение отображения, неупорядоченный набор пар ключ-значение. Словари не допускают дублирования ключей, но допускают дублирование значений.
dict = {'gongzhonghao':'caiyongji','website':'caiyongji.com', 'website':'blog.caiyongji.com'}
вывод словаря{'gongzhonghao': 'caiyongji', 'website': 'blog.caiyongji.com'}
, следует отметить, что когда словарь содержит повторяющиеся ключи, последние элементы перезаписывают прежние элементы.
dict['gongzhonghao']
выходная строкаcaiyongji
. Мы также можем использоватьget
метод имеет тот же эффект.
dict.get('gongzhonghao')
Посмотреть все ключи (ключи):
dict.keys()
выводdict_keys(['gongzhonghao', 'website'])
.
Посмотреть все значения (значение):
dict.values()
выводdict_values(['caiyongji', 'blog.caiyongji.com'])
.
Изменить стоимость предмета:
dict['website'] = 'caiyongji.com'
dict
вывод{'gongzhonghao': 'caiyongji', 'website': 'caiyongji.com'}
.
Зная типы данных Python, мы можем научиться использовать NumPy.
2. Обычное использование Numpy
1. Создайте массив
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
Выход обр.array([1, 2, 3, 4, 5])
.
Мы вводим следующий код для создания двумерного массива:
my_matrix = [[1,2,3],[4,5,6],[7,8,9]]
mtrx= np.array(my_matrix)
Вывод mtrx выглядит следующим образом:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
2. Индексирование и нарезка
Индексируйте одномерные массивы и двузначные массивы следующим образом:
print('arr[0]=',arr[0],'mtrx[1,1]=',mtrx[1,1])
выводarr[0]= 1 mtrx[1,1]= 5
.
Разрезать массив:
arr[:3]
Выходarray([1, 2, 3])
.
Обратный срез:
arr[-3:-1]
выводarray([3, 4])
.
Добавьте шаг, определяющий интервал среза:
arr[1:4:2]
выводarray([2, 4])
.
Срез двумерного массива:
mtrx[0:2, 0:2]
Вывод, смысл кода в том, чтобы взять 1-ю и 2-ю строки и 1-й и 2-й столбцы:
array([[1, 2],
[4, 5]])
3. dtype
dtpe NumPy имеет следующие типы данных:
- i - integer
- b - boolean
- u - unsigned integer
- f - float
- c - complex float
- m - timedelta
- M - datetime
- O - object
- S - string
- U - unicode string
- V - fixed chunk of memory for other type ( void )
import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array(['apple', 'banana', 'cherry'])
print('arr1.dtype=',arr1.dtype,'arr2.dtype=',arr2.dtype)
Выход Мы можем указать тип dtype. бит результата вывода Если вы хотите, чтобы такое же случайное число, как в этом примере, генерировалось случайным образом, вы можете использовать то же случайное начальное число, что и в этом примере. пройти через Сначала мы случайным образом генерируем набор чисел: вывод: Просмотрите максимальное и минимальное значения как: Выход вывод: Среди них arr — одномерный массив, а newarr — двузначный массив, где строка равна 4, а столбец — 3. вывод Объединение одномерных массивов: вывод: Объединение 2D-массивов: Результат: мы добавляем параметрыaxis=1: Результат: мы подводим мышку к Разделить массив: Значение newarr: NumPy доступен через вывод: Давайте посмотрим на код ниже: вывод: Таким образом, мы можем заменить приведенный выше фильтр следующей командой. Вывести отсортированные результаты: Для двумерных массивов Выходной результат: Что, если мы хотим выполнить следующие требования? Создает одномерный массив из 100 значений, где каждое значение должно быть 3, 5, 7 или 9.
Установите вероятность того, что это значение равно 3, равной 0,1.
Установите вероятность этого значения от 5 до 0,3.
Установите вероятность того, что это значение равно 7, равной 0,6.
Установите вероятность этого значения от 9 до 0. Мы решаем это с помощью следующей команды: Выходной результат: Создайте новую случайную перестановку из исходного массива. Результат: Измените исходный массив на случайное расположение. Shuffle в переводе с английского означает перемешивание. Результат: использовать Результат: Если мы хотим увидеть случайное распределение x, нам нужно установить Seaborn для рисования изображения. Установить с помощью пипа: pip install -i pypi.tuna.tsinghua.edu.cn/simple seaborn использовать Результат: Нарисуйте изображение: Полиномиальное распределение является общим представлением биномиального распределения. использовать Приведенный выше код мы можем просто понять как бросание игральных костей. n=6 — это грань игральной кости, а pvals означает, что вероятность каждой стороны равна 1/6. В дополнение к вышеперечисленным распределениям существуют распределение Пуассона, равномерное распределение, экспоненциальное распределение, распределение хи-квадрат, распределение Парето и т. д. Желающие могут поискать сами. Эта статья включена вСерия предварительных руководств по машинному обучению. Приглашаем всех лайкнуть, добавить в избранное и подписаться. Постоянно обновляется более интересный контент о машинном обучении...arr1.dtype= int32 arr2.dtype= <U6
. Тип данных для arr1 — int32, а arr = np.array(['1', '2', '3'], dtype='f')
array([1., 2., 3.], dtype=float32)
, где 1. означает 1.0, вы можете видеть, что для dtype задан тип данных float32.4. Общий метод
4.1 arange
np.arange(0,101,2)
Вывод следующий: команда указывает, что данные равномерно генерируются в интервале [0,101), а размер шага интервала равен 2.array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,
26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50,
52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100])
4.2 zeros
np.zeros((2,5))
Результат вывода выглядит следующим образом: Команда указывает, что выводится матрица (двумерный массив) с 2 строками и 5 столбцами, в которых все нули.array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
4.3 ones
np.ones((4,4))
Вывод выглядит следующим образом: Команда указывает, что выводится матрица со всеми единицами в 4 строках и 4 столбцах.array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
4.4 eye
np.eye(5)
Вывод выглядит следующим образом: Команда указывает, что вывод представляет собой квадратную матрицу с 5 строками и 5 столбцами, диагональ которой равна 1, а все остальные — 0.Квадратная матрица — это матрица с одинаковыми строками и столбцами.array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
4.5 rand
np.random.rand(5,2)
Команда генерирует случайные числа с 5 строками и 2 столбцами.array([[0.67227856, 0.4880784 ],
[0.82549517, 0.03144639],
[0.80804996, 0.56561742],
[0.2976225 , 0.04669572],
[0.9906274 , 0.00682573]])
np.random.seed
настройки метода.np.random.seed(99)
np.random.rand(5,2)
4.6 randint
np.random.randint(0,101,(4,5))
Вывод следующий, команда указывает, что она выбрана случайным образом в интервале [0,101)целое числоСоздает массив из 4 строк и 5 столбцов.array([[ 1, 35, 57, 40, 73],
[82, 68, 69, 52, 1],
[23, 35, 55, 65, 48],
[93, 59, 87, 2, 64]])
4.7 max min argmax argmin
np.random.seed(99)
ranarr = np.random.randint(0,101,10)
ranarr
array([ 1, 35, 57, 40, 73, 82, 68, 69, 52, 1])
print('ranarr.max()=',ranarr.max(),'ranarr.min()=',ranarr.min())
ranarr.max()= 82 ranarr.min()= 1
.
Индексные позиции максимального и минимального значений:print('ranarr.argmax()=',ranarr.argmax(),'ranarr.argmin()=',ranarr.argmin())
ranarr.argmax()= 5 ranarr.argmin()= 0
. Обратите внимание, что при наличии нескольких максимальных и минимальных значений берется предыдущая позиция индекса.3. Расширенное использование NumPy
1. reshape
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(4, 3)
print('arr.shape=',arr.shape,'newarr.shape=',newarr.shape)
arr.shape= (12,) newarr.shape= (4, 3)
.newarr
Результат выглядит следующим образом:array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
2. Слияние и разделение
2.1 concatenate
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.concatenate((arr1, arr2))
arr
array([1, 2, 3, 4, 5, 6])
.arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.concatenate((arr1, arr2))
arr
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.concatenate((arr1, arr2), axis=1)
arr
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
concatenate
, нажмите клавишу быстрого доступаShift+Tab
Посмотреть инструкции. можно увидетьconcatenate
Метод выполняет операцию слияния вдоль существующей оси, ось по умолчанию = 0. Когда мы устанавливаем ось = 1, операция слияния выполняется по столбцам.2.2 array_split
arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
newarr = np.array_split(arr, 3)
newarr
[array([[1, 2],
[3, 4]]),
array([[5, 6],
[7, 8]]),
array([[ 9, 10],
[11, 12]])]
3. Поиск и фильтрация
3.1 Поиск
where
Метод находит индекс массива, удовлетворяющий условию.arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
x = np.where(arr%2 == 0)
x
(array([1, 3, 5, 7], dtype=int64),)
3.2 Скрининг
bool_arr = arr > 4
arr[bool_arr]
array([5, 6, 7, 8])
. На этот раз мы возвращаем значение в массиве, а не индекс.
Посмотримbool_arr
Что именно является содержанием .bool_arr
Результат:array([False, False, False, False, True, True, True, True])
arr[arr > 4]
4. Сортировать
sort
метод для сортировки массива ndarry.arr = np.array(['banana', 'cherry', 'apple'])
np.sort(arr)
array(['apple', 'banana', 'cherry'], dtype='<U6')
.sort
способ сортировки каждой строки по отдельности.arr = np.array([[3, 2, 4], [5, 0, 1]])
np.sort(arr)
array([[2, 3, 4],
[0, 1, 5]])
5. Случайный
5.1 Случайная вероятность
random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=(100))
array([7, 5, 7, 7, 7, 7, 5, 7, 5, 7, 7, 5, 5, 7, 7, 5, 3, 5, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 5, 3, 7, 5, 7, 5, 7, 3, 7, 7, 3, 7, 7, 7, 7, 3,
5, 7, 7, 5, 7, 7, 5, 3, 5, 7, 7, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 5,
7, 7, 7, 7, 7, 5, 7, 7, 7, 7, 3, 7, 7, 5, 7, 5, 7, 5, 7, 7, 5, 7,
7, 7, 7, 7, 7, 3, 5, 5, 7, 5, 7, 5])
5.2 Случайное расположение
5.2.1 permutation
np.random.seed(99)
arr = np.array([1, 2, 3, 4, 5])
new_arr = np.random.permutation(arr)
new_arr
array([3, 1, 5, 4, 2])
. исходный массивarr
постоянный.5.2.2 shuffle
np.random.seed(99)
arr = np.array([1, 2, 3, 4, 5])
np.random.shuffle(arr)
arr
array([3, 1, 5, 4, 2])
. исходный массивarr
Изменять.5.3 Случайное распределение
5.3.1 Нормальное распределение
np.random.normal
Метод генерирует случайные числа, соответствующие нормальному распределению.x = np.random.normal(loc=1, scale=2, size=(2, 3))
x
array([[ 0.14998973, 3.22564777, 1.48094109],
[ 2.252752 , -1.64038195, 2.8590667 ]])
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(x, hist=False)
plt.show()
5.3.2 Биномиальное распределение
np.random.binomial
Метод генерирует случайные числа, соответствующие биномиальному распределению.x = np.random.binomial(n=10, p=0.5, size=10)
x
array([8, 6, 6, 2, 5, 5, 5, 5, 3, 4])
.import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(x, hist=True, kde=False)
plt.show()
5.3.3 Полиномиальное распределение
np.random.multinomial
Метод генерирует случайные числа, соответствующие полиномиальному распределению.x = np.random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6])
x
5.3.4 Прочее