Numpy学习
一、Numpy是什么
NumPy(Numerical Python) 是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,主要用于数组计算。
二、数组的创建
1.直接用np.array创建
import numpy as np
arr1 = np.array([1,2,3,4])
arr2 = np.array([[1,2],[3,4]])
print("一维数组:\n",arr1)
print("二维数组:\n",arr2)
输出:
一维数组:
[1 2 3 4]
二维数组:
[[1 2]
[3 4]]
2.通过列表转换成数组
import numpy as np
arr_1 = [1,2,3,4]
arr_2 = [[1,2],[3,4]]
arr1 = np.array(arr_1)
arr2 = np.array(arr_2)
print("一维数组:\n",arr1)
print("二维数组:\n",arr2)
输出:
一维数组:
[1 2 3 4]
二维数组:
[[1 2]
[3 4]]
3.用函数创建数组
①创建都是0的数组 - zeros
import numpy as np
print("一维数组:\n",np.zeros(3),"\n")
print("二维数组:\n",np.zeros((2,2)),"\n")
print("三维数组:\n",np.zeros((2,3,3)),"\n")
输出:
一维数组:
[0. 0. 0.]
二维数组:
[[0. 0.]
[0. 0.]]
三维数组:
[[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]]
②创建都是1的数组 - ones
print("一维数组:\n",np.ones(3),"\n")
print("二维数组:\n",np.ones((2,2)),"\n")
print("三维数组:\n",np.ones((2,3,3)),"\n")
输出:
一维数组:
[1. 1. 1.]
二维数组:
[[1. 1.]
[1. 1.]]
三维数组:
[[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]]
③创建指定维度的单位矩阵 - eye
eye()函数调用的只能是二维数组
print("二维单位矩阵:\n",np.eye(4),"\n")
输出:
二维单位矩阵:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
④创建一维数组:arange
import numpy as np
print("一维数组:\n",np.arange(3),"\n") # 输出0-2
print("一维数组:\n",np.arange(1,10,2),"\n") # 输出1-9,中间依此+2
输出:
一维数组:
[0 1 2]
一维数组:
[1 3 5 7 9]
⑤linspace()函数
import numpy as np
print(np.linspace(0,2,10)) # 将0-2划分为10个等分
输出:
[0. 0.22222222 0.44444444 0.66666667 0.88888889 1.11111111
1.33333333 1.55555556 1.77777778 2. ]
⑥数组维数转换 - reshape
a1 = np.array([1,2,3,4])
print(a1.reshape(2,2))
输出:
[[1 2]
[3 4]]
三、数组的运算
1.数组+标量(实数)
数组中的每个位置都加上这个标量
arr2 = np.array([[3,4,5],[6,7,8]])
print(arr2 + 2)
输出:
[[ 5 6 7]
[ 8 9 10]]
2.数组+数组
对应位置的值,做对应的运算
加法:对应位置相加
减法:对应位置相减
乘法:对应位置相乘
除法:对应位置相除
以加法为例:
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[3,4,5],[6,7,8]])
print(arr1+arr2)
输出:
[[ 4 6 8]
[10 12 14]]
3.数组转化矩阵,对矩阵做乘法 - mat
注意:数组的乘法需要同行同列,但是矩阵需要前面一个的列等于后面一个的行才可以使用乘法。
arr1 = np.array([[1,2],[4,5]])
arr2 = np.array([[3,4],[6,7]])
arr3 = np.mat(arr1)
arr4 = np.mat(arr2)
print(arr1*arr2)
print(arr3*arr4)
输出:
[[ 3 8]
[24 35]]
[[15 18]
[42 51]]
4.数组维度展开 - 广播性
扩展可以理解为复制
np.array([1,2]) == np.array([[1,2],[1,2]])
arr1 = np.array([1,2])
arr2 = np.array([[3,4],[6,7]])
print(arr1+arr2)
输出:
[[4 6]
[7 9]]
四、数组的索引
从0开始索引
axis = 0 - - 行
axis = 1 - -列
axis = 2 - -个数(三维的)
1.一维数组的索引
规律:包前不包后
arr[:3] == arr[0:3]
arr[4:] == arr[4:10]
arr1 = np.arange(10)
print(arr1[5]) # 下标为5(第六位)
print(arr1[:3]) # 下标为0-2,输出
print(arr1[3:6]) #下标为3-5,输出
输出:
5
[0 1 2]
[3 4 5]
2.二维数组索引
用逗号,分隔行维度和列维度
arr = np.array([[1,2,3],[2,3,4],[3,4,7]])
print(arr[1]) # 第二行
print(arr[2,1]) #第三行第二列
print(arr[:,1]) #全部行第二列
输出:
[2 3 4]
4
[2 3 4]
3.布尔索引
arr[arr<5]=0 # 当在arr中,有值比5小,就把它复制给0
arr = np.array([[1,2,3],[2,3,4],[3,4,7]])
arr[arr<5]=0 # 当在arr中,有值比5小,就把它复制给0
print(arr)
输出:
[[0 0 0]
[0 0 0]
[0 0 7]]
五、数学统计方法
注意:下面所有的方法中
axis = 0,都是对列做运算
axis = 1,都是对行做运算
1.均值mean - 平均值
arr = np.array([[1,2,3],[7,3,4],[3,4,7]])
print(np.mean(arr))
print(np.mean(arr,axis = 0)) # 对列求均值
print(np.mean(arr, axis = 1)) #对行求均值
输出:
3.7777777777777777
[3.66666667 3. 4.66666667]
[2. 4.66666667 4.66666667]
2.sum方法 - 求和
arr = np.array([[1,2,3],[7,3,4],[3,4,7]])
print(np.sum(arr))
print(np.sum(arr,axis = 0)) # 对列求和
print(np.sum(arr, axis = 1)) #对行求和
输出:
34
[11 9 14]
[ 6 14 14]
3.最大值最小值:max,min
arr = np.array([[1,2,3],[7,3,4],[3,4,7]])
print(np.max(arr))
print(np.max(arr,axis = 0)) # 每列的最大值
print(np.max(arr, axis = 1)) #每行的最大值
输出:
7
[7 4 7]
[3 7 7]
4.排序 - sort
系统默认的是行排序
arr = np.array([[1,2,3],[7,3,4],[3,4,7]])
print(np.sort(arr)) # 默认行排序
print(np.sort(arr,axis = 0)) # 按照列排序
print(np.sort(arr, axis = 1)) #按照行排序
输出:
[[1 2 3]
[3 4 7]
[3 4 7]]
[[1 2 3]
[3 3 4]
[7 4 7]]
[[1 2 3]
[3 4 7]
[3 4 7]]
5.唯一化
最常见的可能要数np.unique了,它用于找出数组中的唯一值,并返回已排好序的结果。
names=np.array([3,3,3,2,2,1,1,4,4])
np.unique(names)
输出:
array([1, 2, 3, 4])
6.生成随机数
7.数组拼接
np.vstack()和np.hstack()【v代表列,h代表行】
调用他们就是,在每列下面加,或者每行后面加
#列添加
a=np.array([[1,2,3],
[4,5,6]])
b=np.array([[7,8,9],
[10,11,12]])
np.vstack((a,b))
输出:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
# 行添加
a=np.array([[1,2,3],
[4,5,6]])
b=np.array([[7,8,9],
[10,11,12]])
np.hstack((a,b))
输出:
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 10, 11, 12]])