在机器学习中,需要把所有的输入数据都转变为多维数组的形式
数组的形状:描述数组的维度,以及各个维度内部的元素个数
数组的形状用一个元组来表示,它描述了数组的维度和长度
1、创建数组
NumPy
Numeric Python
提供了多维数组、矩阵的常用操作和一些高效的科学计算函数
底层运算通过C语言实现,处理速度快、效率高,适用于大规模多维数组
可以直接完成数组和矩阵运算,无需循环
导入NumPy库
import numpy as np
from numpy import *
创建数组
array ([列表]/(元组))
数组的属性
属性 | 描述 |
---|---|
ndim | 数组的维数 |
shape | 数组的形状 |
size | 数组元素的总个数 |
dtype | 数组中元素的数据类型 |
itemsize | 数组中每个元素的字节数 |
NumPy要求数组中所有元素的数据类型必须是一致的
Python支持的数据类型不足以满足多种科学计算的需求,NumPy增加了多种其他数据类型
array([列表]/(元组),dtype=数据类型) #使用dtype指定数组中元素的数据类型
在使用Python列表或元组,创建NumPy数组时,所创建的数组类型,由原来的元素类型推导而来
创建特殊的数组
函数 | 功能描述 |
---|---|
np.arange() | 创建数字序列数组 |
np.ones() | 创建全1数组 |
np.zeros() | 创建全0数组 |
np.eye() | 创建单位矩阵 |
np.linspace() | 创建等差数列 |
np.logspace() | 创建等比数列 |
asarray()函数:将列表或元组转化为数组对象
数组2没有变化,数组3发生改变
当数据源本身已经是一个ndarray对象时,array()仍然会复制出一个副本,asarray()则直接引用了本来的数组
2、数组运算
函数 | 功能描述 |
---|---|
np.reshape(shape) | 不改变当前数组,按照shape创建新的数组 |
np.resize(shape) | 改变当前数组,按照shape创建数组 |
当改变形状时,应该考虑到数组中元素的个数,确保改变前后,元素总个数相等
若数组内的元素个数不同,则无法相加
一维数组可以和多维数组相加,相加时会将一维数组扩展至多维
数组之间的减法、乘法、除法运算,和加法运算规则相同
当两个数组中元素的数据类型不同时,精度低的数据类型,会自动转换为精度更高的数据类型,然后再进行运算
- 幂运算:对数组中的每个元素求n次方
矩阵运算
矩阵乘法
乘号运算符✖:矩阵中对应的元素分别相乘
矩阵相乘:按照矩阵相乘的规则运算
转置和求逆
矩阵转置:np.transpose()
矩阵求逆:np.linalg.inv()
数组间的运算
函数 | 功能描述 |
---|---|
numpy.sum() | 计算所有元素的和 |
numpy.prod() | 计算所有元素的乘积 |
numpy.diff() | 计算数组的相邻元素之间的差 |
np.sqrt() | 计算各元素的平方根 |
np.exp() | 计算各元素的指数值 |
np.abs() | 取各元素的绝对值 |
轴(axes):数组中的每一个维度称为一个轴
秩(rank):轴的个数(和线性代数中秩的含义不同)
- 一维数组(rank=1)
- 二维数组(rank=2)
- 三维数组(rank=3)
数组堆叠运算
np.stack((数组1,数组2,...),axis)
二维数组堆叠
3、矩阵和随机数
- 借助NumPy二维数组创建矩阵
- 矩阵对象的属性
属性 | 说明 |
---|---|
.ndim | 矩阵的维数 |
.shape | 矩阵的形状 |
.size | 矩阵的元素个数 |
.dtype | 元素的数据类型 |
矩阵运算
矩阵相乘
非方阵的转置、求逆运算
随机数
随机数模块——numpy.random
函数 | 功能描述 | 返回值 |
---|---|---|
np.random.rand(d0,d1,…,dn) | 元素在[0,1)区间均匀分布的数组 | 浮点数 |
np.random.uniform(low,high,size) | 元素在[low,high)区间均匀分布的数组 | 浮点数 |
np.random.randint(low,high,size) | 元素在[low,high)区间均匀分布的数组 | 整数 |
np.random.randn(d0,d1,…,dn) | 产生标准正态分布的数组 | 浮点数 |
np.random.normal(loc,scale,size) | 产生正态分布的数组 | 浮点数 |
伪随机数:由随机种子,根据一定的算法生成的
随机种子:指定随机数生成时所用算法开始的整数值
- 如果使用相同的seed()值,则每次生成的随机数都相同
- 如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同
- 采用seed()函数设置随机种子,仅一次有效
- 随机数产生的算法,和系统有关
打乱顺序函数
np.random.shuffle(序列)
多维数组只打乱第一维数据