Numpy数组处理库
导入numpy库并取别名为np
import numpy as np
查看numpy库里提供了哪些东西
dir(np)或help(np)
补充说明jupyer的一个功能
将光标放在函数上,按shift+tab
可以调出函数说明:
使用numpy的随机函数随机产生数组
numpy.random.rand()
numpy.random.rand(d0,d1,…,dn)
- rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
- dn表示维度
- 返回值为指定维度的array
例:
numpy.random.randn() —— 重要
numpy.random.randn(d0,d1,…,dn)
-
randn函数返回一个或一组样本,具有标准正态分布。
-
dn表示维度
-
返回值为指定维度的array
-
通过
.shape
可以查看生成的数组的构造 -
通过
.ndim
查看数组的维度(也可以理解为“轴”的个数) -
通过
.size
查看数组包含的元素个数
-
.argmax
: 返回指定轴的最大值的索引(下标)。二维数组中,参数“0”代表列,参数“1”代表行
解释一下为什么使用.argmax(axis=0)
后,输出array([1, 1, 0]) ?
.argmax
返回指定轴的最大值的索引(下标)
。二维数组中,参数“0”代表列,参数“1”代表行。
使用.argmax(0)
取出列的最大值的索引
:
生成的三行三列数组arr3的第一列是:0.78650488,1.30572907,-0.49828544,其中1.30572907最大,它的索引为1。
生成的三行三列数组arr3的第二列是:0.38190384,1.60970205,-2.00096618,其中1.60970205最大,它的索引为1。
生成的三行三列数组arr3的第三列是:1.145984,-0.2094228,-0.85838297,其中1.145984最大,它的索引为0。
同理,使用.argmax(axis=1)
取出行的最大值的索引
:
numpy.random.randint()
numpy.random.randint(low, high=None, size=None, dtype=numpy.int32)
- 返回随机整数,范围区间为[low,high),包含low,不包含high
- 参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
- high没有填写时,默认生成随机数的范围是[0,low)
生成[0,1)之间的浮点数
- numpy.random.random_sample(size=None)
- numpy.random.random(size=None)
- numpy.random.ranf(size=None)
- numpy.random.sample(size=None)
numpy.random.choice()
numpy.random.choice(a, size=None, replace=True, p=None)
- 从给定的一维数组中生成随机数
- 参数: a为一维数组类似数据或整数;size为数组维度;p为数组中的数据出现的概率
- a为整数时,对应的一维数组为np.arange(a)
- 参数p的长度与参数a的长度需要一致;
- 参数p为概率,p里的数据之和应为1
numpy.random.seed()
- np.random.seed()的作用:使得随机数据可预测。
- 当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数
numpy.zeros()
用于生成全0数组,可以用dtype形参指定变量类型
例: 生成三行四列的全零数组,且类型为float32
数组相乘numpy.dot()
numpy.arange() —— 重要
numpy 库中的使用 arange 函数创建数值范围并返回 ndarray(n-dimensional array,n维数组的意思) 对象,函数格式如下:
numpy.arange(start, stop, step, dtype)
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。
数组的广播
将一个数组乘10,会将里面所有数乘10
数组加一个数字,每个元素都会加上这个数字
若arr2是4行6列的数组,arr3是1行6列的矩阵,用arr2 + arr3 是arr2的每行加上arr3对应元素
数组类型的特点
- 有自己的shape(形状)
- 有数据类型(dtype), 如:dtype=numpy.int32; dtype=numpy.float32
- 可以修改数组中元素的值
修改数组形状numpy.reshape() —— 非常重要
- 预备工作,先生成一个数组对象:
arr5 = np.arange(0, 24, dtype=np.int32)
arr5
- 将数组转换成三行八列的数组:
arr5.reshape(3, 8)
- 将数组转换成四行六列的数组:
arr5.reshape(4, 6)
-
通过索引找到修改过shape的数组的第一个元素(注意与列表索引的区别,数组索引稍微简便,少了些括号):
-
补充列表中的索引元素:
-
修改数组中的元素:
注意,使用reshape函数时,不会创建副本。例如,这里修改了arr6的元素,但是也修改了arr5的元素,arr5和arr6指向同一个元素,没有创建副本,如下图:
使用copy函数,创建副本
arr6 = arr5.copy()
使用函数list()强制将数组转换为列表
使用函数list()强制将三行四列数组转换为列表,其中的每个元素仍是数组类型:
使用.ndim查看数组的维度
也可以理解成数组的轴的个数。
例: arr6为三行四列的数组
使用.size查看数组里面元素个数
类型转换(重点)
使用numpy.array()将列表转换为数组
注意看注释,涉及type()函数、dtype属性的使用
numpy.astype()
通过查看函数说明,可知astype()可以创建原数组的副本,并改变数组中元素的类型
例:
使用astype()函数后,通过arr8中的元素查看是否是arr7的副本:
数组切片
数组切片是原始数据的视图,也就是不会创造副本。注意这与列表切片的区别。
高维数组切片:
例1:
例2: