10.1 numpy模块
目录
10.1 numpy模块
- numpy模块下载:pip install numpy
- 学到过的python基础数据类型:int/float/str/list/dict/tuple/set;其中 list/dict 用的多。
- 列表在numpy中叫作一维数组
- numpy基础数据类型:一维数组,二维数组,三维数组
以下代码均为使用jupyter书写,方便交互。
1.一维数组
- 只有一行,一个列表放多个元素;相当于一条线。
import numpy as np #重命名为np
lis=[1,2,3]
np.array(lis)
#输出
array([1, 2, 3])
2.二维数组(用的最多)
- 有行有列,一个列表放了多个一维数组;相当于一个面,面里有很多线。
import numpy as np
arr=np.array([ [1,2,3,4],
[5,6,7,8] ])
arr
#输出
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
3.三维数组(了解)
- 一个列表放多个二维数组,相当于一个体,里面有多个面。
import numpy as np
arr=np.array([[[1,2,3,4],[5,6,7,8]],[[1,2,3,4],[5,6,7,8]],[[1,2,3,4],[5,6,7,8]]])
arr
#输出
array([[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[1, 2, 3, 4],
[5, 6, 7, 8]]])
4.回顾list方法
- 索引\切片\长度\成员运算\for循环\append等内置方法
5. np.array和list的区别
- np.array是多维数组,list是一维数组。
- list对一维数组做一些操作(内置方法),numpy是对多维做操作(内置方法)
6. numpy内置方法
(1)获取多维数组的行和列(二维数组)
import numpy as np
arr=np.array([ [1,2,3,4],
[5,6,7,8] ])
arr.shape #获取行数和列数
#输出
(2, 4)
arr=np.array([ [1,2,3,4],
[5,6,7,8] ])
arr.shape[0] #获取行数
#输出
2
arr=np.array([ [1,2,3,4],
[5,6,7,8] ])
arr.shape[1] #获取列数
#输出
4
(2)多维数组索引取值
lis=[1,2,3,4]
lis[1]
#输出
2
arr=np.array([ [1,2,3,4],
[5,6,7,8] ])
#取出元素7
arr[1,2] #第一行第三列元素为7,行和列用逗号隔开
#or
# arr[1][2]
#输出
7
arr=np.array([ [1,2,3,4],
[5,6,7,8] ])
arr[0,[0,1,2,3]] #取第一行元素
# or
# arr[0]
#输出
array([1, 2, 3, 4])
arr=np.array([ [1,2,3,4],
[5,6,7,8] ])
arr[0,:] #拿到第一行所有列
#输出
array([1, 2, 3, 4])
arr=np.array([ [1,2,3,4],
[5,6,7,8] ])
arr[:,1] #拿到第二列元素
#输出
array([2, 6])
高级功能
有一个多维数组存储的是人的年龄,表格内有200岁以上的年龄
import numpy
arr=np.array([ [100,212,30,4],
[5,600,7,80],
[5,6,700,8] ])
arr>200 #>200元素为True,<200元素为False
#输出
array([[False, True, False, False],
[False, True, False, False],
[False, False, True, False]])
#获取大于200的元素
arr=np.array([ [100,212,30,4],
[5,600,7,80],
[5,6,700,8] ])
arr[arr>200]
#输出
array([212, 600, 700])
(3)多维数组的元素的替换
#列表元素的替换
lis=[1,2,3,4]
lis[0]=0
lis
#输出
[0, 2, 3, 4]
#多维数组元素的替换
import numpy
arr=np.array([ [100,212,30,4],
[5,600,7,80],
[5,6,700,8] ])
arr[1,1]=0
# arr[1][1]=0
arr #arr是可变数据类型
#输出
array([[100, 212, 30, 4],
[ 5, 0, 7, 80],
[ 5, 6, 700, 8]])
arr=np.array([ [100,212,30,4],
[5,600,7,80],
[5,6,700,8] ])
arr[0,:]=0 #第一行元素都变0
# arr[0]=0
arr
#输出
array([[ 0, 0, 0, 0],
[ 5, 600, 7, 80],
[ 5, 6, 700, 8]])
import numpy
arr=np.array([ [100,212,30,4],
[5,600,7,80],
[5,6,700,8] ])
#大于200的元素设置为0
arr[arr>200]=0
arr
#输出
array([[100, 0, 30, 4],
[ 5, 0, 7, 80],
[ 5, 6, 0, 8]])
(4)多维数组合并
-
什么情况下需要合并?
两份表格做的是一样的是事情,需要合并两个表格,方便一起对数据进行处理。 -
vstack & hstack
只能放一个参数,这个参数必须得是容器
#垂直合并
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
arr2=np.array([[10,20,30,40],[50,60,70,80]])
np.vstack((arr1,arr2)) #vertical
#输出
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[10, 20, 30, 40],
[50, 60, 70, 80]])
#横向合并
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
arr2=np.array([[10,20,30,40],[50,60,70,80]])
np.hstack((arr1,arr2)) #传入列表或元组
np.hstack([arr1,arr2]) #传入列表或元组
#输出
array([[ 1, 2, 3, 4, 10, 20, 30, 40],
[ 5, 6, 7, 8, 50, 60, 70, 80]])
- concatenate
在numpy中,为了统一做处理,只要有axis=0就是列,axis=1就是行。在pandas中可能也有所不同,不确定axis=0是行还是列,可以打印看一下
#垂直合并
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
arr2=np.array([[10,20,30,40],[50,60,70,80]])
np.concatenate((arr1,arr2),axis=0) #默认垂直合并,axis=0为列
#输出
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[10, 20, 30, 40],
[50, 60, 70, 80]])
#横向合并
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
arr2=np.array([[10,20,30,40],[50,60,70,80]])
np.concatenate((arr1,arr2),axis=1) #axis=1为行
#输出
array([[ 1, 2, 3, 4, 10, 20, 30, 40],
[ 5, 6, 7, 8, 50, 60, 70, 80]])
(5)通过函数方法创建多维数组
- 创建一维数组
[i for i in range(10)]
#输出
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
import numpy as np
np.arange(10)
#输出
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
import numpy as np
np.arange(1,10,2) #从1-10步长为2
#输出
array([1, 3, 5, 7, 9])
- ones:全1数组
import numpy as np
np.ones((3,4)) #3行4列的全1数组
#输出的是浮点型
#输出
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
import numpy as np
np.ones((3,4),dtype=int) #指定为整型
#输出
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
- zeros,全0数组
import numpy as np
np.zeros((3,4)) #3行4列的全0数组
#输出
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
import numpy as np
np.zeros((3,4,5)) #生成三维,3个4行5列的二维数组
#5控制列,一维;4,5控制二维;3,4,5控制三维
#输出
array([[[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.],
[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.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
- eye
生成单位矩阵
import numpy as np
np.eye(3) #生成三行三列单位矩阵,类型是浮点型
#输出
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
(6)矩阵的运算
涉及到需要两个矩阵运算的,两个矩阵形状需要一样
+ :两个矩阵对应元素相加
- :两个矩阵对应元素相减
* :两个矩阵对应元素相乘
/ :两个矩阵对应元素相除,如果都是整数则取商
% :两个矩阵对应元素相除取余
** n :单个矩阵每个元素都取n次方,如**2:每个元素都取平方
# 1 相加
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
arr2=np.array([[10,20,30,40],[50,60,70,80]])
arr1+arr2
#其他也都类似
#输出
array([[11, 22, 33, 44],
[55, 66, 77, 88]])
# 2 **n
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
arr1**2
#输出
array([[ 1, 4, 9, 16],
[25, 36, 49, 64]])
(7)点乘和转置(了解)
*点乘是线性代数知识,具体计算过程可以查百度。
- 需要满足要求:
(1)矩阵arr1 :nm ,n行m列
矩阵arr2 :mk ,m行k列
(4)arr1、arr2点乘得到的矩阵形状为n*k(n=m=k也可以)
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
np.dot(arr1,arr1.T)
#输出
array([[ 30, 70],
[ 70, 174]])
(8)求逆(了解)
- 要求逆的矩阵需要为方阵。
- 线性代数知识,具体运算过程可百度。
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
arr=np.dot(arr1,arr1.T)
np.linalg.inv(arr)
#输出
array([[ 0.54375, -0.21875],
[-0.21875, 0.09375]])
(9)最大值 & 最小值
import numpy as np
arr1=np.array([[1,2,3,4],[10,6,7,8]])
arr1.max()
#输出
10
import numpy as np
arr1=np.array([[1,2,3,4],[10,6,7,8]])
arr1.min()
#输出
1
(10)numpy生成随机数
- 之前生成随机数都是一维的,现在生成多维。
np.random.rand(3,4) #随机生成3行4列的二维数组,取值范围是(0,1)
# np.random.rand(3,4,5) #生成三维
#输出
array([[0.68650093, 0.83462567, 0.01828828, 0.75014431],
[0.98886109, 0.74816565, 0.28044399, 0.78927933],
[0.10322601, 0.44789353, 0.9085955 , 0.29361415]])
- 随机种子,固定随机数。
import numpy as np
np.random.seed(1) #永不随机,固定
np.random.rand(3,4)
#输出
array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01],
[1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01],
[3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])
rs=np.random.RandomState(1)
rs.rand(3,4)
#输出
array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01],
[1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01],
[3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])
(11)其他高级方法
where,apply
浙公网安备 33010602011771号