一.导入库
import numpy as np
二.创建
1.numpy中只有一种数据类型:ndarray,表示n维数组
创建ndarray数组:
-由列表或者元组类型创建数组
-有元组类型创建数组
-创建特殊数组
2.采用np.array函数来创建,语法为:
np.array(列表或元组)
将参数列表或者元组转换成ndarray类型.相当于强制类型转换
a=np.array([1,2,3,5,19]) 由列表创建一维数组
b=np.array([[1,1,1],[2,2,2],[3,3,3]]) 由列表创建二维数组
a=np.array((1,2,3,5,19)) 由元组创建一维数组
b=np.array(((1,1,1),(2,2,2),(3,3,3))) 由元组创建二维数组
b=np.array(([1,1,1],(2,2,2),[3,3,3])) 混搭的。。。
创建数组时,可以用dtype指定数据类型:
a=np.array([1,2,3,5,19],dtype=np.int32)
当不指定dtype的时候,numpy会根据数据自动匹配合适的类型
三.数组类型的属性
生成一个数组 : b=np.array([[1,1,1],[2,2,2],[3,3,3]])
.ndim:数据是几维的:b.ndim的值为2
.shape:数据的形状,即尺寸:b.shape的结果为(3,3)
.size: 数组中元素的数量 b.size的值为9
.dtype: 数组元素的数据类型 b.dtype 的结果为 int32
.itemsize:数组中元素所占的字节数
四.利用函数创建特殊数组
1.全零数组
①np.zeros(shape, dtype = float)
shape为数组的形状,是列表类型或者元组类型
dtype是数据的类型,可以是整数或者实数,该参数可以省略
例子:a=np.zeros((3,3),dtype=int),则a里面是一个3*3的全零数组
②np.zeros_like(a)
a为一个已知的数组,np.zeros_like(a)生成一个与a形状相同的全零数组
a=np.array([[1,2],[2,3],[3,5]]) # a是一个三行两列的矩阵
则np.zeros_like(a) 生成一个三行两列的全零数组
2.全1数组
①numpy.ones(shape, dtype)
np.ones: 创建指定形状的数组,数组元素以 1 来填充
例如:np.ones([5,5],dtype=np.int32) #五行五列全是1的数组
②np.ones_like(a)
参数a为一个已知的数组,该函数根据数组a的形状生成一个全1的数组
3.全是某个值的数组
①np.full(shape,fill_value)
根据指定的shape生成一个全是fill_value的数组
例如:np.full((4,7),8) #四行七列全是8的数组
②np.full_like(a,8) 生成一个与数组a相同,且里面元素都是8的数组
5.np.eye生成单位矩阵
np.eye(n)
生成一个n行n列的单位矩阵
6.np.arange选定数值范围创建数组
语法 np.arange(start, stop, step, dtype)
start :起始值,默认为0
stop : 终止值(不包含)
step : 步长,默认为1
dtype :类型,可以省
例子:
np.arange(10) #输出array([0,1,2,3,4,5,6,7,8,9])
np.arange(2,15) #输出array([2,3,4,5,6,7,8,9,10,11,12,13,14])
np.arange(3,20,5) #输出array([3,8,13,18])
c=np.arange(9).reshape(3,3) #输出array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
注意:使用np.arange生成的数组都是一维的,如何变成多维呢?使用数组的reshape方法
例如:np.arange(100).reshape(10,10)
方法的调用!!!! 用变量名.方法名
七.创建线性一维数组
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start : 序列的起始值
stop : 序列的终止值,如果endpoint为true,该值包含于数列中
num : 要生成的等步长的样本数量,默认为50
endpoint : 该值为True时,数列中包含stop值,反之不包含,默认是True
retstep : 如果为True时,生成的数组中会显示间距,反之不显示
dtype : ndarray的数据类型
例如:a = np.linspace(1,10,10) array([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
八.生成随机数组
1.numpy中有个随机数子库,叫做np.random。
里面包含很多随机数生成算法,使用的时候,采用 np.random.方法名 的形式去使用。
①np.random.rand(d0,d1,...dn) 根据d0,d1,...dn的值生成[0,1)之间均匀分布的随机数组。
②np.random.randn(d0,d1,...dn) 根据d0,d1,...dn的值生成[0,1)之间标准正太分布的随机数组。
③np.random.randint(low,high,shape)在[low,high)区间生成shape形状的随机数组
例如:np.random.randint(1,10,[5,5])
np.random.randint(1,10) 生成1-10之间的随机整数(一个整数)
④np.random.seed(s) 随机数种子函数 : 参数必须是整数类型
⑤np.random.shuffle(a) 把数组a打乱顺序
⑥np.random.choice(a,size,replace=False)
解释:从数组a中,随机等概率选取数据,构成shape形状的数组。
当replace的值默认为True,此时,数据可以被重复选取,当不希望重复选取数据的时候,修改replace=False
⑦np.random.uniform(low,high,size):在[low,high)之间等概率的抽取元素,产生形状为size的数组。
⑧np.random.normal(loc,scale,size):产生均值为loc,方差为scale的尺寸为size的符合正态分布的数组
⑨np.poisson:生成泊松分布的数组
九.数组的变换-改变形状
1.reshape函数: 改变数组的形状,不改变数组元素的个数,原数组不变,生成一个和原数组数据一样的新数组。
有两种reshape。一种是np的函数,一种是数组的方法.
假设a=np.arange(100), 则a为含有100个元素的一维数组。则改变a为10*10的数组,
方法有:
b=np.reshape(a,(10,10)) # np的函数
b=a.reshape(10,10) # 数组的方法
b=a.reshape((10,10))
执行完上面的代码后,b为10*10的数组,而a还是含有100个元素的1维数组
2.resize((shape),refcheck=True) #refcheck默认是true,自身调用时须改成false
功能与reshape相同,但是改变原数组
a.resize((1,9)) a变为一维数组了。
①当resize()是用np调用的时候,这时需要第一个参数是矩阵本身,然后记得加括号,是改正后 的矩阵维度, 这时有返回值,可以打印出
例如:>>>a=np.arange(100)
>>> b=np.resize(a,(1,9))
>>> b
输出:array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])
②当resize()是矩阵自己调用自己时,函数没有返回值,因此是None,但是也改变了ndarray的值,
这时再打印ndarray就是被resize()改变后的值 ***自身调用时,refcheck=False
例如:>>>a=np.arange(100)
>>>a.resize((1,9),refcheck=False)
>>>a
结果:array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])
十.数组的变换-扁平化
1.flatten()函数,数组扁平化,也就是把多维数组变成一维数组,但是原数组不变。
假设a是一个二维数组,则a.flatten(),得到一个按行展开的一维数组
例如:>>>a=np.random.randint(1,5,[3,3])
>>>a
结果:array([[4, 2, 2],
[4, 1, 1],
[1, 3, 2]])
>>>a.flatten()
结果:array([4, 2, 2, 4, 1, 1, 1, 3, 2])
>>>a
结果:array([[4, 2, 2],
[4, 1, 1],
[1, 3, 2]])
2.a.astype()函数 改变类型的函数
b=a.astype(np.float16),生成一个新数组,新数组中与原数组元素相同,类型不同。
注意:原数组类型不发生变化
例如:>>>a=np.random.randint(1,5,[3,3])
>>>a
结果:array([[4, 2, 4],
[2, 3, 4],
[1, 1, 4]])
>>>a.astype(np.float16)
结果:array([[4., 2., 4.],
[2., 3., 4.],
[1., 1., 4.]], dtype=float16)
>>>a
结果:array([[4, 2, 4],
[2, 3, 4],
[1, 1, 4]])
3.a.tolist()函数 把数组a变成列表
a.T 与a.transpose() 数组的转置 ,都不改变原数组
例如:>>>a=np.random.randint(1,5,[3,3])
>>>a
结果:array([[4, 4, 4],
[3, 4, 2],
[3, 3, 1]])
>>>a.tolist()
结果:[[4, 4, 4], [3, 4, 2], [3, 3, 1]]
>>>a.T
结果:array([[4, 3, 3],
[4, 4, 3],
[4, 2, 1]])
>>>a.transpose()
结果:array([[4, 3, 3],
[4, 4, 3],
[4, 2, 1]])
>>>a
结果:array([[4, 4, 4],
[3, 4, 2],
[3, 3, 1]])
十一.常用函数及其使用
1.统计函数
使用方法:①np.函数名 ②数组变量.函数名
sum |
求和 |
mean |
求平均值 |
std |
求标准差 |
var |
求方差 |
median |
求中位数 |
max |
求最大值 |
min |
求最小值 |
average() |
加权平均数 |
举例:
求和:
np.sum(a) 和 a.sum(): 求数组a中所有元素的和。
np.sum(a,axis=0)和 a.sum(axis=0) : 对数组a按行求和
np.sum(a,axis=1)和 a.sum(axis=0) : 对数组a按列求和
求均值
np.mean(a)和a.mean() 求数组a中所有元素的均值
np.mean(a,axis=0)和a.mean(axis=0) 求数组a中所有列的均值
np.mean(a,axis=1)和a.mean(axis=1) 求数组a中所有行的均值
其它统计函数的用法类似
2.数学函数
np.sin() |
正弦 |
np.cos() |
余弦 |
np.tan() |
正切 |
np.arcsin() |
反正弦 |
np.arccos() |
反余弦 |
np.arctan() |
反正切 |
np.degree() |
将弧度转换为角度 |
np.ptp(a) |
计算数组a种最大值与最小值的差 |
3.舍入函数
np.around() |
四舍五入 |
np.floor() |
向下取整 |
np.ceil() |
向上取整 |
4.排序函数
np.sort(a, axis, kind):对数组a按axis所指定的轴进行排序,排序采用kind参数指定的算法。kind参数可以省略
十二.数组的索引与切片
1.一维数组的索引和切片
索引:a[0],a[-1]
切片:数组名[起始位置:结束位置:步长] a[1:10:2]
2.多维数组的索引和切片
索引:a[0,5,7] 多个维度之间用逗号分隔。
a[0,5,7]表示 第一维数据,选第0个,第2维数据,选第5个,第三维数据,选第7个
切片: ①选择多行: a[起始行:结束行]
②格式: a[m:n,p:q] 第一维选择m到n行,不包括n,第2维选择p到q列,不包括q
3.列表做索引:
①选择多行,把多行包装成列表,作为索引,
如:a[[0,3]]表示选择第0行和第3行。当选择整行,不考虑列的时候,可以不写列
②np.ix_函数: 能把两个一维数组 转换为 一个用于选取方形区域的索引器。
实际意思就是,直接往np.ix_()里扔进两个一维数组[1,3],[2,4,5],就能先选1,3行,再选2,4,5列。
④布尔索引--条件索引
大于5的数: a[a>5]
能被5整除的数a[a%5==0]
既能被2整除,又大于5的数:b=a[a%2==0] c=b[b>5]
十三.ndarray类型数据的运算
1.数组与标量(单个数据)之间的运算:相当于数组中的每个元素与标量之间的运算,例如:a=np.arange(10).reshape(2,5) a+5,相当于a中每个元素都加了5,
2.数据规范化
如何规范化:随机生成一个二维数组,对数组进行规范化,即数组中每个元素减去数组元素的均值除以数组元素的方差:
a=a.mean()/a.std()
3.numpy中一元函数:作用到元素上
对数组运算,实际上是对数组中每个数据进行运算。
np.abs() 求数组中各个元素的绝对值,结果可以是整数或者实数
np.fabs() 求数组中各个元素的绝对值,结果是实数
np.sqrt() 求数组中各个元素的平方根
np.log np.log10 np.log2 计算数组中各个元素的自然对数、以10为底的对数, 以2为底的对数
np.ceil()和np.floor分别表示的是对数组中各个元素进行取整
np.rint()对数组中每个元素进行四舍五入
np.sin() np.cos() np.tan() np.cosh() np.sinh() np.tanh() 对数组中的每个元素进行三角运算。
np.sign() 计算数组中每个元素的符号值,结果为1,0,或-1分别表示正数,0和负数
np.exp() 计算数组中每个元素的指数值
4.numpy中的二元函数和二元运算
两个同尺寸的数组加减乘除,相当于对应元素的加减乘除
np.maximum(a,b) 求两个数组a和b对应元素的最大值
np.minimum(a,b) 求两个数组a和b对应元素的最小值
np.mod(a,b) a中元素除以b中元素的余数
np.copysign(x,y) 将数组y中各元素的符号赋值给x中元素的符号
关系运算符号:> 、>=、< 、<= 、 ==、 !=对应元素进行比较
a[a>b] 在a中找出比数组b大的数