NumPy简介

NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API

NumPy包的核心是 ndarray 对象。它封装了python原生的同数据类型的 n 维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的

NumPy数组 和 原生Python Array(数组)之间有几个重要的区别:

  1. NumPy 数组在创建时具有固定的大小,与Python的原生数组对象(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原来的数组
  2. NumPy 数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。 例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组
  3. NumPy 数组有助于对大量数据进行高级数学和其他类型的操作。通常,这些操作的执行效率更高,比使用Python原生数组的代码更少

为什么NumPy这么快?基于C进行构建的

NumPy基础

NumPy数组对象

简介

NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:

  1. 实际的数据
  2. 描述这些数据的元数据

大部分的数组操作只会修改元数据部分,而不会改变底层的实际数据

NumPy数组一般是同质的,即数据中的元素类型必须是一致的(也有例外情况,不过常用的是同质)

创建数组对象

创建一维数组

  1. import numpy as np
  2. a = np.arange(5)
  3. print('a -> ', a)
  4. print('dtype -> ', a.dtype)
  5. print('shape -> ', a.shape)

image.png

创建多维数组

  1. import numpy as np
  2. a = np.array([np.arange(2), np.arange(2)])
  3. print('a -> ', a)
  4. print('dtype -> ', a.dtype)
  5. print('shape -> ', a.shape)

image.png

选取数组元素

  1. import numpy as np
  2. a = np.array([np.arange(2), np.arange(2)])
  3. print("a[0][1] -> ", a[0][1])
  4. # 也可以直接通过逗号的形式进行维度分割
  5. print("a[1][1] -> ", a[1, 1])

image.png

NumPy支持的数据类型

image.png
每一种类型都有对应的类型转换函数,常见的如:int()、float()、bool()、float64()等等

字符编码

NumPy还支持通过字符编码的形式指定元素的数据类型,这是为了兼容NumPy的前身Numeric
image.png
使用示例

  1. import numpy as np
  2. a = np.array(np.arange(2), dtype='f')
  3. print(a.dtype)

image.png

也可以通过dtype对象获取数据类型的字符编码:

  1. import numpy as np
  2. a = np.array(np.arange(2), dtype='f')
  3. adtype = a.dtype
  4. # 获取对应的字符编码
  5. print('char -> ', adtype.char)
  6. # 获取对应的类型名称
  7. print('type -> ', adtype.type)

image.png

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 内部由以下内容组成:

  1. 一个指向数据(内存或内存映射文件中的一块数据)的指针;
  2. 数据类型或 dtype,描述在数组中的固定大小值的格子;
  3. 一个表示数组形状(shape)的元组,表示各维度大小的元组;
  4. 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要”跨过”的字节数

Python库 - NumPy学习笔记 - 图8

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列….的元素