Введение в основы Numpy (1)

NumPy
Введение в основы Numpy (1)

«Это 18-й день моего участия в ноябрьском испытании обновлений. Подробную информацию об этом событии см.:Вызов последнего обновления 2021 г."

Что такое Нампи?

Numpy — это набор инструментов для научных вычислений с открытым исходным кодом для Python и продвинутый инструмент численного программирования.

  • Мощный объект N-мерного массива: ndarray
  • Вы можете работать со структурированными данными массива (без обхода циклов)
  • Есть такие функции, как случайные числа, линейная алгебра, преобразование Фурье и т.д.

Как установить?

Установите научную вычислительную среду Anaconda

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

ссылка для скачивания:https://www.anaconda.com/download/

Конкретные шаги по установке здесь повторяться не будут.Друзья, которые не понимают, могут обсудить в группе обмена или обратиться к следующим сообщениям в блоге:

cuiqingcai.com/5059.html

Установить Нампи

Способ 1: после установки anaconda numpy можно использовать напрямую без дополнительной установки.

Способ 2: можно использовать без установленной анакондыpip install numpyУстановить.

Установите ноутбуки Jupyter (рекомендуется)

Способ 1. После установки Anaconda ноутбуки Jupyter можно использовать напрямую, без дополнительной установки.

Способ 2: можно использовать без установленной анакондыpip install jupyterУстановить.

Базовая структура данных Numpy

Импортировать

Рекомендуемое использованиеfrom numpy import np

Не рекомендуется для использованияfrom numpy import *, потому что numpy содержит большое количество функций с теми же именами, что и встроенные функции Python.

сгенерировать ndarray

Вы можете использовать массив для создания массивов Возьмите каштан:

import numpy as np
ar = np.array([[1,2,3,4],[1,2,3,4]])
print(ar, type(ar))

>>>
[[1 2 3 4]
  [1 2 3 4]] <class 'numpy.ndarray'>

Помимо np.array есть и другие функции, которые могут создавать новые массивы, вот несколько часто используемых:

arange # python range的数组版
asarray # 将输入转换为ndarray
ones # 根据给定的形状和类型生成全1的数组
ones_like # 根据给定的数组生成形状一样的全1的数组
zeros # 根据给定的形状和类型生成全0的数组
zeros_like # 根据给定的数组生成形状一样的全1的数组
eye # 生成一个N*N的特征矩阵(对角线为1,其余为0)
linspance # 返回在间隔[开始,停止]上计算的num个均匀间隔的样本

Вот примеры нулей, zeros_like и linspance:

arr = np.zeros((3,5))
print(arr)

>>>
[[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]

s = np.array([list(range(10)),list(range(10,20))])
print(s)
print(np.zeros_like(s))

>>>
[[ 0  1  2  3  4  5  6  7  8  9]
  [10 11 12 13 14 15 16 17 18 19]]
[[0 0 0 0 0 0 0 0 0 0]
  [0 0 0 0 0 0 0 0 0 0]]

print(np.linspace(10,20,num = 21)) #在10,21之间生成
print(np.linspace(10,20,num = 21, endpoint = False)) #endpoint默认为True,为False时不包含左边的值
print(np.linspace(10,20,num = 21, retstep = True))# restep显示步长

>>>
[10.  10.5 11.  11.5 12.  12.5 13.  13.5 14.  14.5 15.  15.5 16.  16.5
 17.  17.5 18.  18.5 19.  19.5 20. ]
[10.         10.47619048 10.95238095 11.42857143 11.9047619  12.38095238
 12.85714286 13.33333333 13.80952381 14.28571429 14.76190476 15.23809524
 15.71428571 16.19047619 16.66666667 17.14285714 17.61904762 18.0952381
 18.57142857 19.04761905 19.52380952]
(array([10. , 10.5, 11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. ,
       15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5, 20. ]), 0.5)

В дополнение к нескольким часто используемым функциям для создания массивов, вот несколько часто используемых методов:

import numpy as np
ar = np.array([[1,2,3,4],[1,2,3,4]])
print(ar, type(ar))
print(ar.ndim)#返回数组的维度的个数
print(ar.shape)#数组的维度,返回几行几列
print(ar.size)#数组元素的个数
print(ar.dtype)#元素的类型
print(ar.itemsize)#数组中元素的大小

>>>
[[1 2 3 4]
 [1 2 3 4]] <class 'numpy.ndarray'>
2
(2, 4)
8
int64
8

Общие функции Numpy

Преобразование формы массива (.T/.reshape()/.resize())

.T — функция транспонирования, которая не влияет на одномерные массивы.

# .T
import numpy as np
ar1 = np.arange(10)
ar2 = np.zeros((2,5))
print(ar1.T)
print(ar2.T)#转置函数

>>>
[0 1 2 3 4 5 6 7 8 9]
[[0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]]

.reshape(), напрямую изменить форму массива, но количество элементов массива должно быть одинаковым до и после изменения

ar1 = np.arange(10)
print(ar1.reshape(2,5))
print(np.reshape(np.arange(16),(2,8)))

>>>
[[0 1 2 3 4]
 [5 6 7 8 9]]
[[ 0  1  2  3  4  5  6  7]
 [ 8  9 10 11 12 13 14 15]]

.resize()

print(np.resize(np.arange(16),(3,5)))  # resize当后面的数组元素个数小于前面生成的数量时,按照顺序迭代
print(np.resize(np.arange(12),(3,5)))  # resize当后面的数组元素个数大于前面的生成的数量,则随机填充

>>>
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11  0  1  2]]
копия массива

Подобно глубокому и мелкому копированию в python:

преобразование типов массивов

.astype() умеет преобразовывать типы элементов в массиве, в numpy есть следующие типы элементов (слишком много не пропишется):

int8, uint8 #有符号和无符号的8整位整数
int16, uint16 #有符号和无符号的16整位整数
int32, uint32 #有符号和无符号的32整位整数
int64, uint64 #有符号和无符号的64整位整数
float16 #半精度
float32 #单精度
float64 #双精度
bool #布尔
.....

Дайте каштан преобразования типа:

ar1 = np.arange(10,dtype=float)
ar2 = ar1.astype(np.int64)
print(ar1,ar2)

>>>
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [0 1 2 3 4 5 6 7 8 9]
укладка массивов

Стекирование массивов включает hstack(), vstack() и stack().Следующие примеры:

a = np.arange(10)
b = np.arange(10,20)
print(ar1,ar2)
# 横向链接
print(np.hstack((a,b)))
# 竖向链接
a = np.array([[1],[2],[3]])
b = np.array([['a'],['b'],['c']])
print(np.vstack((a,b)))
# 任意堆叠
a = np.arange(10)
b = np.arange(10,20)
print(np.stack((a,b),axis=1)) # 竖向堆叠
print(np.stack((a,b))) # 横向堆叠

>>>>
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
[['1']
 ['2']
 ['3']
 ['a']
 ['b']
 ['c']]
[[ 0 10]
 [ 1 11]
 [ 2 12]
 [ 3 13]
 [ 4 14]
 [ 5 15]
 [ 6 16]
 [ 7 17]
 [ 8 18]
 [ 9 19]]
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
разделение массива

Разделение массива также делится на горизонтальное разделение и вертикальное разделение.

# 数组拆分
ar = np.arange(16).reshape(4,4)
print(ar)
print(np.hsplit(ar,2)) #纵向拆分
print(np.vsplit(ar,2)) #横向拆分

>>>
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]
Часто используемые функции расчета

Функция вычисления здесь такая же, как и функция вычисления в Python, и здесь она не будет подробно обсуждаться.

#计算函数
np.mean() #求平均值
np.max() #最大值
np.min() #最小值
np.gtd() #标准差
np.var() #方差
np.sum() # 其中参数axis=0按列求和axis=1按行求和

Закрепляющие упражнения

  1. Создайте одномерный массив, двумерный массив и просмотрите его форму
  2. Создайте одномерный массив с начальным значением 5, конечным значением 15 и количеством выборок 10.
  3. Создайте массив из 20 элементов и измените их на две формы: (4,5), (5,6)
  4. Создайте массив (4,4) и измените тип его элемента на тип символа
  5. Создайте двумерный массив ar, начальное значение равно 0, а конечное значение равно 15. Используйте метод операции с массивом, чтобы получить результат: результат = ar * 10 +100, и найдите среднее значение и сумму результата.