NumPy简介
NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API
NumPy包的核心是 ndarray 对象。它封装了python原生的同数据类型的 n 维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的
NumPy数组 和 原生Python Array(数组)之间有几个重要的区别:
- NumPy 数组在创建时具有固定的大小,与Python的原生数组对象(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原来的数组
- NumPy 数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。 例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组
- NumPy 数组有助于对大量数据进行高级数学和其他类型的操作。通常,这些操作的执行效率更高,比使用Python原生数组的代码更少
NumPy基础
NumPy数组对象
简介
NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:
- 实际的数据
- 描述这些数据的元数据
大部分的数组操作只会修改元数据部分,而不会改变底层的实际数据
NumPy数组一般是同质的,即数据中的元素类型必须是一致的(也有例外情况,不过常用的是同质)
创建数组对象
创建一维数组
import numpy as npa = np.arange(5)print('a -> ', a)print('dtype -> ', a.dtype)print('shape -> ', a.shape)

创建多维数组
import numpy as npa = np.array([np.arange(2), np.arange(2)])print('a -> ', a)print('dtype -> ', a.dtype)print('shape -> ', a.shape)
选取数组元素
import numpy as npa = np.array([np.arange(2), np.arange(2)])print("a[0][1] -> ", a[0][1])# 也可以直接通过逗号的形式进行维度分割print("a[1][1] -> ", a[1, 1])
NumPy支持的数据类型

每一种类型都有对应的类型转换函数,常见的如:int()、float()、bool()、float64()等等
字符编码
NumPy还支持通过字符编码的形式指定元素的数据类型,这是为了兼容NumPy的前身Numeric
使用示例
import numpy as npa = np.array(np.arange(2), dtype='f')print(a.dtype)

也可以通过dtype对象获取数据类型的字符编码:
import numpy as npa = np.array(np.arange(2), dtype='f')adtype = a.dtype# 获取对应的字符编码print('char -> ', adtype.char)# 获取对应的类型名称print('type -> ', adtype.type)
NumPy函数大全
import numpy as np
生成函数
| 生成函数 | 作用 |
|---|---|
| np.array( x) np.array( x, dtype) |
将输入数据转化为一个ndarray 将输入数据转化为一个类型为type的ndarray |
| np.asarray( array ) | 将输入数据转化为一个新的(copy)ndarray |
| np.ones( N ) np.ones( N, dtype) np.ones_like( ndarray ) |
生成一个N长度的一维全一ndarray 生成一个N长度类型是dtype的一维全一ndarray 生成一个形状与参数相同的全一ndarray |
| np.zeros( N) np.zeros( N, dtype) np.zeros_like(ndarray) |
生成一个N长度的一维全零ndarray 生成一个N长度类型位dtype的一维全零ndarray 类似np.ones_like( ndarray ) |
| np.empty( N ) np.empty( N, dtype) np.empty(ndarray) |
生成一个N长度的未初始化一维ndarray 生成一个N长度类型是dtype的未初始化一维ndarray 类似np.ones_like( ndarray ) |
| np.eye( N ) np.identity( N ) |
创建一个N * N的单位矩阵(对角线为1,其余为0) |
| np.arange( num) np.arange( begin, end) np.arange( begin, end, step) |
生成一个从0到num-1步数为1的一维ndarray 生成一个从begin到end-1步数为1的一维ndarray 生成一个从begin到end-step的步数为step的一维ndarray |
| np.mershgrid(ndarray, ndarray,…) | 生成一个ndarray ndarray …的多维ndarray |
| np.where(cond, ndarray1, ndarray2) | 根据条件cond,选取ndarray1或者ndarray2,返回一个新的ndarray |
| np.in1d(ndarray, [x,y,…]) | 检查ndarray中的元素是否等于[x,y,…]中的一个,返回bool数组 |
矩阵函数
| 矩阵函数 | 说明 |
|---|---|
| np.diag( ndarray) np.diag( [x,y,…]) |
以一维数组的形式返回方阵的对角线(或非对角线)元素 将一维数组转化为方阵(非对角线元素为0) |
| np.dot(ndarray, ndarray) | 矩阵乘法 |
| np.trace( ndarray) | 计算对角线元素的和 |
| 排序函数 | 说明 |
|---|---|
| np.sort( ndarray) | 排序,返回副本 |
| np.unique(ndarray) | 返回ndarray中的元素,排除重复元素之后,并进行排序 |
| np.intersect1d( ndarray1, ndarray2) np.union1d( ndarray1, ndarray2) np.setdiff1d( ndarray1, ndarray2) np.setxor1d( ndarray1, ndarray2) |
返回二者的交集并排序。 返回二者的并集并排序。 返回二者的差。 返回二者的对称差,即两者并集 - 两者交集 |
一元计算函数
| 一元计算函数 | 说明 |
|---|---|
| np.abs(ndarray) np.fabs(ndarray) |
计算绝对值 计算绝对值(非复数) |
| np.mean(ndarray) | 求平均值 |
| np.sqrt(ndarray) | 计算平方根 |
| np.square(ndarray) | 计算平方 |
| np.exp(ndarray) | 计算e^x |
| log、log10、log2、log1p | 计算自然对数、底为10的log、底为2的log、底为(1+x)的log |
| np.sign(ndarray) | 计算正负号:1(正)、0(0)、-1(负) |
| np.ceil(ndarray) np.floor(ndarray) np.rint(ndarray) |
计算大于等于该值的最小整数 计算小于等于该值的最大整数 四舍五入到最近的整数,保留dtype |
| np.modf(ndarray) | 将数组的小数和整数部分以两个独立的数组方式返回 |
| np.isnan(ndarray) | 返回一个判断是否是NaN的bool型数组 |
| np.isfinite(ndarray) np.isinf(ndarray) |
返回一个判断是否是有穷(非inf,非NaN)的bool型数组 返回一个判断是否是无穷的bool型数组 |
| cos、cosh、sin、sinh、tan、tanh | 普通型和双曲型三角函数 |
| arccos、arccosh、arcsin、arcsinh、arctan、arctanh | 反三角函数和双曲型反三角函数 |
| np.logical_not(ndarray) | 计算各元素not x的真值,相当于-ndarray |
多元计算函数
| 多元计算函数 | 说明 |
|---|---|
| np.add(ndarray, ndarray) np.subtract(ndarray, ndarray) np.multiply(ndarray, ndarray) np.divide(ndarray, ndarray) np.floor_divide(ndarray, ndarray) np.power(ndarray, ndarray) np.mod(ndarray, ndarray) |
相加 相减 乘法 除法 圆整除法(丢弃余数) 次方 求模 |
| np.maximum(ndarray, ndarray) np.fmax(ndarray, ndarray) np.minimun(ndarray, ndarray) np.fmin(ndarray, ndarray) |
求最大值 求最大值(忽略NaN) 求最小值 求最小值(忽略NaN) |
| np.copysign(ndarray, ndarray) | 将参数2中的符号赋予参数1 |
| np.greater(ndarray, ndarray) np.greater_equal(ndarray, ndarray) np.less(ndarray, ndarray) np.less_equal(ndarray, ndarray) np.equal(ndarray, ndarray) np.not_equal(ndarray, ndarray) |
> >= < <= == != |
| logical_and(ndarray, ndarray) logical_or(ndarray, ndarray) logical_xor(ndarray, ndarray) |
& | ^ |
| np.dot( ndarray, ndarray) | 计算两个ndarray的矩阵内积 |
| np.ix_([x,y,m,n],…) | 生成一个索引器,用于Fancy indexing(花式索引) |
文件读写函数
| 文件读写 | 说明 |
|---|---|
| np.save(string, ndarray) | 将ndarray保存到文件名为 [string].npy 的文件中(无压缩) |
| np.savez(string, ndarray1, ndarray2, …) | 将所有的ndarray压缩保存到文件名为[string].npy的文件中 |
| np.savetxt(sring, ndarray, fmt, newline=’\n’) | 将ndarray写入文件,格式为fmt |
| np.load(string) | 读取文件名string的文件内容并转化为ndarray对象(或字典对象) |
| np.loadtxt(string, delimiter) | 读取文件名string的文件内容,以delimiter为分隔符转化为ndarray |
NumPy.random
| 函数 | 说明 |
|---|---|
| seed() seed(int) seed(ndarray) |
确定随机数生成种子 |
| permutation(int) permutation(ndarray) |
返回一个一维从0~9的序列的随机排列 返回一个序列的随机排列 |
| shuffle(ndarray) | 对一个序列就地随机排列 |
| rand(int) randint(begin,end,num=1) |
产生int个均匀分布的样本值 从给定的begin和end随机选取num个整数 |
| randn(N, M, …) | 生成一个NM…的正态分布(平均值为0,标准差为1)的ndarray |
| normal(size=(N,M,…)) | 生成一个NM…的正态(高斯)分布的ndarray |
| beta(ndarray1,ndarray2) | 产生beta分布的样本值,参数必须大于0 |
| chisquare() | 产生卡方分布的样本值 |
| gamma() | 产生gamma分布的样本值 |
| uniform() | 产生在[0,1)中均匀分布的样本值 |
NumPy.linalg
| 函数 | 说明 |
|---|---|
| det(ndarray) | 计算矩阵列式 |
| eig(ndarray) | 计算方阵的本征值和本征向量 |
| inv(ndarray) pinv(ndarray) |
计算方阵的逆 计算方阵的Moore-Penrose伪逆 |
| qr(ndarray) | 计算qr分解 |
| svd(ndarray) | 计算奇异值分解svd |
| solve(ndarray) | 解线性方程组Ax = b,其中A为方阵 |
| lstsq(ndarray) | 计算Ax=b的最小二乘解 |
ndarray
ndarray简介
ndarray对象是用于存放同类型元素的多维数组,是numpy中的基本对象之一,另一个是func对象
ndarray 内部由以下内容组成:
- 一个指向数据(内存或内存映射文件中的一块数据)的指针;
- 数据类型或 dtype,描述在数组中的固定大小值的格子;
- 一个表示数组形状(shape)的元组,表示各维度大小的元组;
- 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要”跨过”的字节数
ndarray常用属性列表
| ndarray.ndim | 获取ndarray的维数 |
|---|---|
| ndarray.shape | 获取ndarray各个维度的长度 |
| ndarray.dtype | 获取ndarray中元素的数据类型 |
| ndarray.T | 简单转置矩阵ndarray |
ndarray常用函数列表
基本函数
| 函数 | 说明 |
|---|---|
| ndarray.astype(dtype) | 转换类型,若转换失败则会出现TypeError |
| ndarray.copy() | 复制一份ndarray(新的内存空间) |
| ndarray.reshape((N,M,…)) | 将ndarray转化为NM…的多维ndarray(非copy) |
| ndarray.transpose((xIndex,yIndex,…)) | 根据维索引xIndex,yIndex…进行矩阵转置,依赖于shape,不能用于一维矩阵(非copy) |
| ndarray.swapaxes(xIndex,yIndex) | 交换维度(非copy) |
计算函数
| 计算函数 | 说明 |
|---|---|
| ndarray.mean( axis=0 ) | 求平均值 |
| ndarray.sum( axis= 0) | 求和 |
| ndarray.cumsum( axis=0) ndarray.cumprod( axis=0) |
累加 累乘 |
| ndarray.std() ndarray.var() |
方差 标准差 |
| ndarray.max() ndarray.min() |
最大值 最小值 |
| ndarray.argmax() ndarray.argmin() |
最大值索引 最小值索引 |
| ndarray.any() ndarray.all() |
是否至少有一个True 是否全部为True |
| ndarray.dot( ndarray) | 计算矩阵内积 |
排序函数
| 排序函数 | 说明 |
|---|---|
| ndarray.sort(axis=0) | 排序,返回源数据 |
ndarray索引/切片方式
| ndarray[n] | 选取第n+1个元素 |
|---|---|
| ndarray[n:m] | 选取第n+1到第m个元素 |
| ndarray[:] | 选取全部元素 |
| ndarray[n:] | 选取第n+1到最后一个元素 |
| ndarray[:n] | 选取第0到第n个元素 |
| ndarray[ bool_ndarray ] 注:bool_ndarray表示bool类型的ndarray |
选取为true的元素 |
| ndarray[[x,y,m,n]]… | 选取顺序和序列为x、y、m、n的ndarray |
| ndarray[n,m,…] ndarray[n][m]…. |
选取n行n列….的元素 |
