Numpy 快速计算科学库

简介

  • 一个开源的Python科学计算库,用于快速处理任意维度的数组
  • 支持常见的数组和矩阵操作。对于同样的数值计算任务
  • 使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

Numpy官方中文文档

导包:import numpy as np

数组基本信息

NumPy提供了一个N维数组类型ndarray,它描述了相同类型的items的集合(数组中元素的数据类型相同)

ndarray比原生python列表运行计算时大约快10倍,原因:

  • 因为ndarray仅能存储相同类型的数据(存在一个小数,则所有的整数均化为小数),其直接指向数据而非内存地址
  • 底层由c编写,内部解除了GIL(全局解释器锁)
  • Numpy内置并行运算功能,并会自定进行并行运算

属性

属性名字属性解释
ndarray数组名.shape数组维度的元组
ndarray数组名.ndim数组维数
ndarray数组名.size数组中的元素数量
ndarray数组名.itemsize一个数组元素的长度(字节)
ndarray数组名.dtype数组元素的类型

数据形状

a = np.array([1,2,3,4])  # 一维数组 形状元组为(4,)
b = np.array([[1,2,3],[4,5,6]])  # 二维数组 形状元祖为(2,3)
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])  # 三维数组 形状元祖为(2,2,3)

数据类型

数据名称描述数据简写字符
np.bool用一个字节存储的布尔类型(True或False)b
np.int8一个字节大小,-128 至 127i1
np.int16整数,-32768 至 32767i2
np.int32整数,-2^31​ 至 2^32 -1i4i
np.int64整数,-2^63 至 2^63 - 1i8
np.uint8无符号整数,0 至 255u1
np.uint16无符号整数,0 至 65535u2
np.uint32无符号整数,0 至 2^32 - 1u4
np.uint64无符号整数,0 至 2^64 - 1u8
np.float16半精度浮点数:16位,正负号1位,指数5位,精度10位f2
np.float32单精度浮点数:32位,正负号1位,指数8位,精度23位f4
np.float64双精度浮点数:64位,正负号1位,指数11位,精度52位f8
np.complex64复数,分别用两个32位浮点数表示实部和虚部c8
np.complex128复数,分别用两个64位浮点数表示实部和虚部c16
np.object_python对象O
np.string_字符串(字节流)S
np.unicode_unicode类型U
三种指定数组元素数据类型方式
b = np.array([[1,2,3],[4,5,6]], dtype = np.float32 )
b = np.array([[1,2,3],[4,5,6]], dtype = 'float32' )
b = np.array([[1,2,3],[4,5,6]]dtype = 'f4')

操作数组

生成数组

零一数组

  1. 全零数组
    np.zeros(shape, dtype) 若不指定dtype则 默认为float64型
    np.zeros_like(已存在的数组名, dtype) 根据指定的存在数组的 形状生成 全零数组
  2. 全一数组
    np.ones(shape, dtype) 若不指定dtype则 默认为float64型
    np.ones_like(已存在的数组名, dtype) 根据指定的存在数组的 形状生成 全零数组
  3. 单位矩阵 np.eye(值) 生成一个指定值行列的单位矩阵
  4. np.full(shape, 指定值)填充出一个全指定值的数组

注意:

  • shape表示数组维度的元组,例:(2,3)两行三列的二维数组
  • zeros_likeones_like仅仅是根据传入数组的维度 生成新的数组,而非修改传入的数组
  • dtype=上表中的数组名称(dtype=np.int16)和dtype="数据简写字符"(dtype="u2")两种传参方式

在这里插入图片描述

从现有数组生成

  • np.array(已有数组名, dtype)
  • np.asarray(已有数组名, dtype)

注意:

  • 区别在于两者的拷贝已有数组的深度:
    • np.arrary()表示深拷贝
    • np.asarray()浅拷贝

在这里插入图片描述

固定范围数组

  1. 范围平分(等差数列)
    np.linspace (起始值, 终止值, 平分份数, endpoint)
    平分份数默认为:50份,endpoint=False表示不包含终止值,默认包含终止值
    在这里插入图片描述

  2. 设置步长(等差数列)
    np.arange(起始值,终止值, 步长, dtype)
    当 加步长 超过 终止值时 数值停止,步长默认为 1,默认不包含终止值
    在这里插入图片描述

  3. 范围平分得指数(等比数列)
    np.logspace(起始值, 终止值, 平分份数, base=底数)默认包含终止值;底数默认为:10
    在这里插入图片描述

随机数组

均匀分布数据数组
  • 生成0到1之间随机值的数组
    格式:np.random.rand(shape) shape去括号
    作用:创建一个 指定数组维数的 填充0到1之间随机值的数组
    在这里插入图片描述

  • 指定范围的随机值数组
    格式np.random.uniform(low=采样下界, high=采样上界, size=shape) 不可指定dtype
    功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开

    • low: 采样边界1,float类型,默认值为 0.0;值可比high
    • high: 采样边界2,float类型,默认值为1.0;可省略
    • size: 输出样本的数组维度元祖,缺省时输出1个值
      在这里插入图片描述
  • 指定范围的随机整值数组
    np.random.randint(low,high=None,size=shape,dtype='i') 不包含终止值
    功能:从一个均匀分布中随机采样,生成一个整数或N维整数数组,
    取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数
    在这里插入图片描述

正态分布随机数组

正态分布:一种概率分布。正态分布是具有两个参数μσ的连续型随机变量的分布,所以正态分布记作N(μ,σ )

  • μ是服从正态分布的随机变量的 均值,表示数组越靠近μ,概率越大

  • σ是此随机变量的 标准差,σ越大表示越离散,图形越矮胖
    在这里插入图片描述

  • 标准正态分布(μ=0σ=1)随机值数组
    格式:np.random.randn(shape) shape去括号

  • 指定μσ的正态分布随机数组
    格式:np.random.normal(loc=均值, scale=标准差, size=shape)
    shape默认为:None,即返回一个随机值

  • np.random.standard_normal(size=shape)
    返回指定形状的标准正态分布的数组,默认为:None
    np.random.randn(shape)没有太大差异

数组操作

索引和切片

二维数组的切片盒索引是:先行后列 (从外向里依次的下标)
在这里插入图片描述

形状修改

注意:在转换形状的时候,一定要注意变形前后的数组元素个数必须一致

  1. ndarray数组名.reshape(shape, order) 不修改原有数组,而是生成一个新数组
  2. ndarray数组名.resize(new_shape) 修改原有数组的shapeshape-1表示自行计算该维度元素个数,最多有一个
  3. 数组转置:ndarray数组名.T行列装换,生成新数组,不修改原数组
    在这里插入图片描述
    在这里插入图片描述

类型转换

  1. ndarray数组名.astype(type)返回修改为指定类型之后的数组
    例:stock_int.astype(np.int32)
  2. ndarray数组名.tostring()或者ndarray数组名.tobytes()构造包含数组中原始数据的Python字符串和字节
  3. np.unique(数组名) 数组的去重并一维数组输出
    temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
    np.unique(temp)
    array([1, 2, 3, 4, 5, 6])
    

数组运算

逻辑判断 和 布尔赋值

# 逻辑判断, 如果成绩大于60就标记为True 否则为False   注意仅判断不修改
>>> test_score > 60
array([[ True,  True,  True, False,  True],
       [ True,  True,  True, False,  True],
       [ True,  True, False, False,  True],
       [False,  True,  True,  True,  True]])

# 布尔赋值, 将满足条件的设置为指定的值-布尔索引  修改原数组数据
>>> test_score[test_score > 60] = 1
>>> test_score
array([[ 1,  1,  1, 52,  1],
       [ 1,  1,  1, 59,  1],
       [ 1,  1, 44, 44,  1],
       [59,  1,  1,  1,  1]])

复合逻辑判断:结合np.logical_andnp.logical_or使用

# 将大于60且小于90的标记为True 否则为False  注意仅判断不修改
np.logical_and(temp > 60, temp < 90)
# 将大于90或小于60的数据修改为1  会修改原数组的数据
temp[np.logical_or(temp > 90, temp < 60)] = 1

通用判断函数

  1. np.all() 全真才真,一假就假
    # 判断前两名同学的成绩[0:2, :]是否全及格
    np.all(score[0:2, :] > 60)
    执行结果:| TrueFalse
    
  2. np.any() 一真就真,全假才假
    # 判断前两名同学的成绩[0:2, :]是否有大于90分的
    np.any(score[0:2, :] > 80)
    执行结果:| TrueFalse
    

np.where(三元运算符)

格式:np.where(条件,条件成立执行的语句,条件不成立执行的语句)

# 将大于90或小于60的换为1,否则为0
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)

在这里插入图片描述

统计计算

作用命令
数组最小值np.min(数组, axis )
数组最大值np.max(数组, axis )
数组中值np.median(数组, axis ) 中间值或中间两个值的平均值
数组平均值np.mean(数组, axis , dtype)
数组标准差np.std(数组, axis , dtype)
数组方差np.var(数组, axis , dtype)
数组最大元素对应的下标np.argmax(数组,axis)
数组最小元素对应的下标np.argmin(数组,axis)

注意:Numpy中轴向(axis)为0代表列, 为1代表行 去进行统计

数组与值计算

数组与值的加减乘除运算就是数组中的每个元素都对值进行操作
在这里插入图片描述
注意:若不重新赋值则不修改原数组,仅是生成一个新数组

数组与数组的运算

并非所有的数组之间都可以进行运算,仅在 shape完全相同符合广播机制 的情况下才能进行数组减运算。

  1. 两个数组的shape完全相同,对应的位置进行计算,也可以进行比较
    在这里插入图片描述
    在这里插入图片描述

  2. 符合广播机制数据
    广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,共有维度只需要满足如下任意一个条件即可(比较顺序:从后往前

    1. 数组的某一维度等长
    2. 其中一个数组的维度为1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

矩阵和向量运算

  • 矩阵:二维数组
    在这里插入图片描述
  • 向量:一种特殊矩阵,单位矩阵包含行向量和列向量
    在这里插入图片描述
    矩阵和向量的运算符合上文的数组运算,但上文方法中的 x号运算不是数学中矩阵乘法运算(通过函数实现)

矩阵相乘

矩阵乘法遵循准则(M行, N列)*(N行, L列) = (M行, L列)
代码实现格式np.matmul(矩阵a,矩阵 b)np.dot(矩阵a,矩阵b)
注意: np.matmul() 禁止矩阵与标量(数值) 的乘法 (即np.matmul(矩阵1, 2)会报错)

在这里插入图片描述

矩阵和向量乘法也符合矩阵相乘
在这里插入图片描述

1*1+3*5 = 16
4*1+0*5 = 4
2*1+1*5 = 7

在这里插入图片描述
注意:代码B = A * B无法实现 数学上的矩阵相乘

矩阵的逆和转置

矩阵的逆:如矩阵 A 是一个 m×m 矩阵(方阵),如果有逆矩阵,则:A * A-1 = A-1 *A=1
A-1 便是矩阵A的逆

矩阵转置:将 A 的所有元素绕着一条从第 1 行第 1 列元素出发的右下方 45 度的射线作 镜面反转
在这里插入图片描述

Numpy

创建
在这里插入图片描述
访问元素
在这里插入图片描述
元素操作
在这里插入图片描述
数值计算函数
在这里插入图片描述
求和函数
在这里插入图片描述
布尔函数(逻辑判断)
在这里插入图片描述
线性代数函数
在这里插入图片描述
元素取整
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值