NumPy基础

主要内容

  1. ndarray:一种高效多维数组,具有基于数组的便捷算术操作以及灵活的广播功能;
  2. 对所有数据进行快速的矩阵运算,无序编写循环程序;
  3. 对硬盘中的数组数据进行读写的工具,并对内存映射文件进行操作;
  4. 线性代数、随机数生成以及傅里叶变换功能;
  5. 用于连接 NumPy 到 C、C++ 和 FORTRAN 语言类库的 C 语言 API;

1. NumPy ndarray:多维数组对象

一个快速、灵活的大型同类数据集容器,允许使用类似于标量的操作语法在整块数据上进行计算
ndarray.shape: 维度大小属性
ndarray.dtype: 数据类型属性

1.1 生成 ndarray

  1. array 函数接收任意的序列型对象,生成一个新的包含传递数据的 NumPy 数组;
  2. 嵌套序列将会自动传换成多维数组;

数组生成函数

函数名描述
array将输入数据转换为ndarray,如不显式地指明数据类型,将自动推断;默认复制所有的输入数据
asarray将输入转换为 ndarray,但如果输入已经是 ndarray 则不再复制
arangePython 内建函数 range 的数组版,返回一个数组
ones根据给定形状和数据类型生成全 1 数组
ones_like根据所给的数组生成一个形状一样的全 1 数组
zeros/zeros_like全 0 数组,和全 1 类似
empty/empty_like全空数组,同上
full/full_like指定数值数组,同上
eye, identityN*N 特征矩阵(对角线全是1,其余都是 0)

1.2 ndarray 的数据类型

  1. 使用 array 函数时给可选参数 dtype 赋值(类型名 or 类型代码)
  2. 使用 astype 方法显式地转换数组的数据类型(总是生成一个新的数组)

NumPy 数据类型

类型类型代码描述
int8, uint8i1, u1有符号和无符号的 8 数位(1字节)整数,16位(2字节),32位(4字节),64位(8字节)同理
float16f2半精度浮点数
float32f4或f标准单精度浮点数,兼容 C 语言 float
float64f8或d标准双精度浮点数,兼容 C 语言 double 和 Python float
float128f16或g拓展精度浮点数
complex64, complex128, complex256c8, c16, c32分别基于 32 位、64 位、 128 位浮点数的复数
bool?布尔值
objectOPython object 类型
string_S修正的ASCII字符串类型;例如生成一个长度位10的字符串类型,使用‘S10’
unicode_U修正的 Unicode 类型,生成一个长度为 10 的 Unicode 类型,使用‘U10’

1.3 Numpy 数组算术

  1. 数组之所以重要是因为它允许你进行批量性操作而无需任何 for 循环(向量化
  2. 任何两个等尺寸数组之间的算术操作都应用了逐元素操作的方式
  3. 带有标量计算的算术操作,会把计算参数传递给数组的每一个元素;
  4. 同尺寸数组之间的比较,会产生一个布尔值数组;
  5. 不同尺寸的数组间的操作,将会用到广播特性

1.4 基础索引与切片

  1. 一维数组的切片和列表类似;
  2. 与列表不同的是,数组的切片都是原数组的视图,数据并不是被复制了,任何对于视图的修改都会反映到原数组上(数组的量太大,不适合复制数据,若要复制,使用 .copy() 方法)
  3. 二维数组的索引,将0轴看作行,1轴看作列;
  4. 多维数组中,省略后续索引值,返回的对象将是降低一个维度的数组;
  5. 切片与列表相似;

1.5 布尔索引

  1. 布尔数组的长度必须和数组轴索引长度一致;
  2. 使用或 != 或在表达式前使用 ~ 对条件取反;

1.6 神奇索引

  1. 简单地通过传递一个包含指明所需顺序的列表或数组选出一个符合特定顺序的数组的子集;
  2. 使用负的索引,将从尾部进行选择;
  3. 神奇索引与切片不同,它总是将数据复制到一个新的数组中;

1.7 数组转置和换轴

  1. arr.T 与 arr.transpose(包含轴编号的元组):置换轴的顺序,arr.T 为二维数组的转置;
  2. arr.swapaxes(一对轴编号的元组):交换元组内的两个轴,返回的是数据的视图

2. 通用函数:快速的逐元素数组函数

2.1 一元通用函数:

函数名描述
abs, fabs逐元素地计算整数、浮点数或复数的绝对值
sqrt计算每个元素的平方根(与 arr ** 0.5 相等)
square计算每个元素的平方(与 arr ** 2 相等)
exp计算每个元素的自然指数值ex
log, log10, log2, log1p自然对数、对数10为底,对数2为底,log(1+x)
sign每个元素的符号值:1(正数),0,-1(负数)
ceil计算每个元素的最高整数值(即大于等于给定元素的最小整数,即向上取整)
floor计算每个元素的最小整数值(即小于等于给定元素的最大整数,即向下取整)
rint将元素保留到整数位,并保持 dtype
modf分别将数组的小数部分和整数部分按数组形式返回
isnan返回数组中的元素是否是一个 NaN,为布尔值数组
isfinite, isinf元素是否有限、是否无限,为布尔值数组
cos, cosh, sin, sinh, tan, tanh常规的双曲三角函数
arccos, arccosh, arcsin, arcsinh, arctan, arctanh反三角函数
logical_not对数组的元素按位取反(与 ~arr 效果一致)

2.2 二元通用函数

函数名描述
add将数组的对应元素相加
subtract在第二个数组中,将第一个数组中包含的元素去除
multiply将数组的对应元素相乘
divide, floor_divide除或整除
power将第二个数组的元素作为第一个数组对应元素的幂次方
maximum, fmax逐个元素计算最大值,fmax 忽略 NaN
minimum, fmin逐个元素计算最小值,fmin 忽略 NaN
mod按元素的求模运算(即求除法的余数)
copysign将第一个数组的符号值改为第二个数组的符号值
greater, greater_equal, less, less_equal, equal, not_equal逐元素的比较,与 >, >=, <, <=, ==, != 效果一致
logical_and, logical_or, logical_xor逐元素的逻辑操作,与 &, |, ^ 效果一致

3. 使用数据进行面向数组编程

  1. np.meshgrid 函数接收两个一维数组,生成由这两个一维数组的(x, y)对组成的网格数据坐标矩阵(两个二维矩阵,一个 X,一个 Y,X 的每行都一样,Y 的每列都一样)

3.1 将条件逻辑作为数组操作

  1. np.where 是 x if condition else y 的向量化版本:
    np.where(cond, xarr, yarr):当 cond 中的元素为 True 时,取 xarr 中对应的元素值,当 cond 为 False 时,取 yarr 中的对应值(xarr 和 yarr 也可以是标量)

3.2 数学和统计方法

基础数组统计方法:

方法描述
sum沿着轴向计算所有元素的累和,0 长度的数组,累和为0
mean数学平均,0 长度的数组平均值为 NaN
std, var标准差和方差,可以选择自由度调整(默认分母是 n)
min, max最小值和最大值
argmin, argmax最小值和最大值的位置
cumsum从 0 开始元素累积和
cumprod从 1 开始元素累积和

3.3 布尔值数组方法

  1. sum 方法可以用于计算布尔值数组中的 True 的个数
  2. any 方法检查数组中是否至少有一个 True;
  3. all 方法检查是否每个值都是 True;

3.4 排序

  1. 与 Python 内建列表相似,NumPy 数组可以使用 sort 方法按位置排序;
  2. 在多维数组中根据传递的 axis 值,沿着轴向对每个一维数组段进行排序;
  3. 数组的 sort 方法会改变原数组,而顶层的np.sort(arr)方法返回的是已经排序好的数组拷贝,不会改变原数组;

3.5 唯一值与其他集合逻辑

数组的集合操作

方法描述
unique(x)计算 x 的唯一值,并排序
intersect1d(x, y)计算 x 和 y 的交集,并排序
uion1d(x, y)计算 x 和 y 的并集,并排序
in1d(x, y)计算 x 中的元素是否包含在 y 中,返回一个布尔值数组
setdiff1d(x, y)差集,在 x 中但不在 y 中的 x 的元素
setxor1d(x, y)异或集,在 x 或 y 中,但不属于 x,y 交集的元素

4. 使用数组进行文件输入和输出

  1. np.save(‘name’, arr),默认存储为 .npy 格式;
  2. np.load(‘name.npy’);
  3. 保存多个数组:np.savez(‘name.npz’, a=arr, b=arr)
  4. 载入 .npz 文件时,得到一个字典型对象;
  5. 将数据存入已压缩的文件:np.savez_compressed(‘name.npz’, a=arr, b=arr)

5. 线性代数

  1. 矩阵的点乘:x.dot(y) 等价于 np.dot(x, y);
  2. numpy.linalg 函数:
函数描述
diag将一个方阵的对角(或非对角)元素作为一维数组返回,或者将一维数组转换成一个方阵,并且在非对角线上有零点
dot矩阵点乘
trace计算对角元素和
det计算矩阵的行列式
eig计算方阵的特征值和特征向量
inv计算方阵的逆矩阵
pinv计算矩阵的 Morre-Penrose 伪逆
qr计算 QR 分解
svd计算奇异值分解(SVD)
solve求解 x 的线性系统 Ax=b,其中 A是方阵
lstsq计算 Ax=b 的最小二乘解

6. 伪随机数生成

  1. 计算机生成的随机数是由具有确定性行为的算法根据随机数生成器中的随机数种子生成的;
  2. 可以通过 np.random.seed 更改 NumPy 的随机数种子;
  3. numpy.random 中的数据生成函数公用了一个全局的随机数种子;
  4. 使用 numpy.random.RandomState 生成一个随机数生成器,其数据独立于其他的随机数状态;
  5. numpy.random 中的部分函数列表:
函数描述
seed向随机数生成器传递随机状态种子
permutation返回一个序列的随机排列,或者返回一个乱序的整数范围序列
shuffle随机排列一个序列
rand从均匀分布中抽取样本
randint根据给定的由低到高的范围抽取随机整数
randn由均值 0 方差 1 的正太分布中抽取样本(MATLAB 型接口)
binomial从二项分布中抽取样本
normal从正太(高斯)分布中抽取样本
beta从 beta 分布中抽取样本
chisquare从卡方分布中抽取样本
gamma从伽马分布中抽取样本
uniform从均匀[0, 1) 分布中抽取样本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值