科学计算库——numpy

news2024/11/15 20:01:59

科学计算库——numpy

一、概述

numpy作为高性能科学计算和数据分析的基础包,它是众多数据分析、机器学习等工具的基础架构,掌握numpy的功能及其用法将有助于后续其他数据分析工具的学习。本章将针对numpy库的基础功能进行详细地讲解。

二、数组对象

2.1 什么是数组对象

numpy中提供了一个重要的数据结构是ndarray(又称为array)对象,该对象是一个N维数组对象,可以存储相同类型、以多种形式组织的数据。
与Python中的数组相比,ndarray对象可以处理结构更复杂的数据。

数组指由相同类型的数据按有序的形式组织而成的一个集合,组成数组的各个数据称为数组的元素。

2.2 ndarray对象的常用属性

属性说明
ndim数组的维度
shape数组中各维度的大小
size数组元素的总数目
dtype数组元素的类型
itemsize数组中各元素的字节大小
  • ndim属性表示数组的维度。在numpy中,维度称为轴,轴的个数称为秩。
  • 一维数组只有一个轴,其内部的所有数据沿轴方向依次排列;二维数组的结构类似于表格,它一共有沿行方向和列方向的两个轴,其中沿行方向的轴对应编号为0的轴,沿列方向的轴对应编号为1的轴;三维数组的结构类似立方体,它一共有沿着长、宽、高方向的三个轴,这三个轴依次对应着编号为1、2、0的轴。
    在这里插入图片描述
  • shape属性表示数组的形状,也就是数组中各维度的大小,该属性的值为一个形如(行,列)的元组。
    在这里插入图片描述

2.3 numpy的常用数据类型

数据类型说明
bool布尔类型,值为True或False
int8、uint8有符号和无符号的8位整数
int16、uint16有符号和无符号的16位整数
int32、uint32有符号和无符号的32位整数
int64、uint64有符号和无符号的64位整数
float16半精度浮点数(16位)
float32半精度浮点数(32位)
float64半精度浮点数(64位)
complex64复数,分别用两个32位浮点数表示实部和虚部
complex128复数,分别用两个64位浮点数表示实部和虚部

三、创建数组

3.1 根据现有数据类型创建数组

numpy中使用array()函数创建一个数组,该函数需要接收一个列表或元组。

  • 创建一维数组

在这里插入图片描述

  • 创建二维数组
    在这里插入图片描述
  • 创建三维数组
    在这里插入图片描述

3.2 根据指定数值创建数组

numpy中使用zeros()、ones()、empty()函数创建一个基于指定数值的数组,其中zeros()函数用于创建一个元素值都为0的数组;ones()函数用于创建一个元素值都为1的数组;empty()函数用于创建一个元素值都为随机数的数组。

语法格式:

zeros(shape, dtype=float, order='C')
ones(shape, dtype=None, order='C')
empty(shape,dtype=float,order='C'

shape:表示数组的形状。
dtype:(可选)表示数组中元素的类型,默认为float(浮点数)。
order:表示按索引顺序读取数组的元素,默认为’C’,说明采用C语言风格,按行排列数组的元素

  • 使用zero()函数创建数组
    在这里插入图片描述
  • 使用ones()函数创建数组
    在这里插入图片描述
  • 使用empty()函数创建数组
    在这里插入图片描述

3.3 根据指定数值范围创建数组

numpy中使用arange()函数创建一个基于指定区间均匀分布数值的数组,arange()函数的功能类似于Python中的range()函数,不同的是,arange()函数会返回一维数组而非列表。

# 创建一个元素位于[1,30)区间、元素值间隔为5的数组
array_demo = np.arange(1, 30, 5)
print(array_demo)

在这里插入图片描述

四、访问数组元素

数组支持通过索引和切片访问元素。numpy中提供了多种形式的索引:整数索引、花式索引和布尔索引,通过这些索引可以访问数组的单个、多个或一行元素。此外,还可以使用切片访问数组的元素。

  • 整数索引
  • 花式索引
  • 布尔索引

4.1 使用整数索引访问元素

numpy中可以使用整数索引访问数组,以获取该数组中的单个元素或一行元素
一维数组访问元素的方式与列表访问元素方式相似,它会根据指定的整数索引获取相应位置的元素。

import numpy as np
array_1d = np.arange(1, 7)    
print(array_1d)
# 获取索引为2的元素
print(array_1d[2])

在这里插入图片描述
当使用整数索引访问二维数组时,二维数组会根据索引获取相应位置的一行元素,并将该行元素以一维数组的形式进行返回

array_2d = np.arange(1, 7).reshape(2, 3)   
print(array_2d)
# 获取索引为1的一行元素
print(array_2d[1])

在这里插入图片描述
若想获取二维数组的单个元素,需要通过“二维数组[行索引,列索引]”形式实现。

# 获取行索引为1、列索引为2的元素
print(array_2d[1, 2])

在这里插入图片描述

4.2 使用花式索引访问元素

  • 什么是花式索引?

花式索引指以整数组成的数组或列表为索引。当使用花式索引访问一维数组时,会将花式索引对应的数组或列表的元素作为索引,依次根据各个索引获取对应位置的元素,并将这些元素以数组的形式进行返回;当使用花式索引访问二维数组时,会将花式索引对应的数组或列表的元素作为索引,依次根据各个索引获取对应位置的一行元素,并将这些行元素以数组的形式进行返回。

  • 使用花式索引访问一维数组
import numpy as np
array_1d = np.arange(1, 10)    
print(array_1d)
# 访问索引为[2,5,8]的元素
print(array_1d[[2, 5, 8]])

在这里插入图片描述

  • 使用花式索引访问二维数组

在使用两个花式索引,即通过“二维数组[花式索引,花式索引]”形式访问数组时,会将第一个花式索引对应列表的各元素作为行索引,将第二个花式索引对应列表的各元素作为列索引,再按照“二维数组[行索引,列索引]”的形式获取对应位置的元素。

array_2d = np.arange(1, 10).reshape((3, 3))    
print(array_2d)
# 访问索引为[0, 2]的元素
print(array_2d[[0, 2]])

在这里插入图片描述

# 使用两个花式索引访问元素
print(array_2d[[0, 2], [1, 1]])

在这里插入图片描述

4.3 使用布尔索引访问元素

  • 什么是布尔索引?

布尔索引指以布尔值组成的数组或列表为索引。当使用布尔索引访问数组时,会将布尔索引对应的数组或列表的元素作为索引,以获取索引为True时对应位置的元素。

array_2d = np.arange(1, 10).reshape((3, 3))    
print(array_2d)
# 使用布尔索引访问数组
print(array_2d > 5)
print(array_2d[array_2d > 5])

在这里插入图片描述

4.4 使用切片访问元素

  • 一维数组的切片操作
array_1d = np.array([10, 20, 30, 40, 50, 60])
print(array_1d[1:3])
print(array_1d[:3])
print(array_1d[:-1])
print(array_1d[:])
print(array_1d[::2])

在这里插入图片描述

  • 二维数组的切片操作

与一维数组相比,二维数组支持更多的切片操作,不仅可以向中括号内传入一个切片,还可以传入两个切片,甚至可以混合传入索引和切片

# 创建二维数组
arr_2d = np.array([[1, 2, 3], 
              [4, 5, 6], [7, 8, 9]])
print(arr_2d)

# 传入一个切片
# 使用切片访问前两行的元素
print(arr_2d[:2])

# 传入两个切片
# 使用切片访问前两行、第一列的元素
print(arr_2d[:2, 0:1])

# 混合传入整数索引与切片
# 使用切片访问前两行、第二列的元素
print(arr_2d[:2, 1])

在这里插入图片描述

五、数组运算

5.1 形状相同的数组间运算

无论是形状相同的数组,还是形状不同的数组,它们之间都可以执行算术运算。与Python列表不同,数组在参与算术运算时无需遍历每个元素,便可以对每个元素执行批量运算,效率更高。

形状相同的数组在执行算术运算时,会将位置相同的元素做算术运算,并将运算后所得的结果组成一个新数组
在这里插入图片描述

5.2 数组与常量的运算

形状相同的数组之间的任何算术运算都会应用到各元素,同样地,数组与标量执行算术运算时也会将标量应用到各元素,以方便各元素与标量直接进行相加、相减、相乘、相除等基础操作。

六、数组操作

6.1 排序

6.1.1 reshape()函数

reshape()函数的功能是改变数组形状,可以把x维数组改成y维数组。

array1=np. array([1,2,3,4])
print(array1)
array2=array1.reshape((2,2))
print(array2)

在这里插入图片描述

6.1.2 ravel()函数

ravel()函数的功能是将多维数组展开为一维数组。

array1=np. array([[1,2],[3,4]])
print(array1)
array2=array1.ravel()
print(array2)

在这里插入图片描述

6.1.3 concatenate()函数

concatenate()函数的功能是将多个数组连接。

# 语法格式
concatenate(arr,axis)
  • arr:拼接的数组,要求数组维数要一致。
  • axis:默认值是0,表示在第0个维度上拼接,也可以给其赋值,拼接在指定维度上 。
array1=np.array([[1,2],[3,4]])
array2=np.array([[5,6]]) 
array3=np.concatenate((array1,array2))
print(array3)
array4=np.concatenate((array1,array2.T),axis=1)
print(array4)

在这里插入图片描述

6.1.4 delete()函数

delete()函数的功能是从数组中删除指定值。

# 语法格式
delete(arr,obj,axis)
  • arr是需要处理的矩阵;

  • obj在什么位置处理;

  • axis是一个可选参数,axis=None,1,0。

    当axis=None时,arr会先按行展开,然后按照obj,删除第obj-1(从0开始)位置的数,返回一个行矩阵;当axis=0时,arr按行删除;当axis=1时,arr按列删除。

array1=np. array([[1,2],[3,4]])
array2=np. delete(array1,0)
print(array2)
array3=np. delete(array1,1,0)
print(array3)
array4=np. delete(array1,0,1)
print(array4)

在这里插入图片描述

6.1.5 sort()函数

sort()函数返回输入数组的排序结果。

# 语法格式
sort(axis=-1,kind=None,order=None)
  • axis:表示排序的轴编号,默认为-1,代表沿着末尾的轴排序。
  • kind:表示排序的算法,默认为’quicksort’(快速排序)。
  • order:表示按哪个字段排序。
array1=np.array([[1,5],[6,4]])
array2=np.sort(array1)
print(array2)
array3=np.sort(array1,axis=0)
print(array3)

在这里插入图片描述

6.1.6 where()函数

where()函数筛选出满足条件元素的下标。

# 语法格式
where(condition,x,y)
  • 满足条件condition,输出x,不满足输出y 。
  • 若没有x和y,则输出满足条件(即非0)元素的坐标。
array1=np.arange(10)
array2=np.where(array1,1,-1)
print(array2)
array3=np.where(array1>4)
print(array3)
array4=array1[array3]
print(array4)

在这里插入图片描述

6.1.7 extract()函数

extract()和where()函数有一点类似,不过extract()函数是筛选出满足条件元素的值并返回,而不是元素索引。

array1=np.arange(10)
x=np.mod(array1,3)==0
print(x)
array2=np.extract(x,array1)
print(array2)

在这里插入图片描述

七、数学运算

7.1 位运算

7.1.1 bitwise_and()函数

对数组中整数的二进制形式执行按位与运算。

# 语法格式
bitwise_and(a,b)
  • a和b为两个求位与运算的数字或数组
import numpy as np
array1 = np.arange(0,3)
array2 = np.arange(1,4)
np.bitwise_and(array1,array2)

在这里插入图片描述

7.1.2 invert()函数

对数组中整数进行按位取反运算,即0变成1,1变成0。

# 语法格式
invert(n)
  • n为按位取反运算的数字
np.invert(3)

在这里插入图片描述

7.1.3 left_shift()函数

将数组元素的二进制形式向左移动到指定位置,右侧附加相等数量的0。

# 语法格式
left_shift(a,b)
  • a为要左移的数字
  • b为要左移的位数
np.left_shift(1,1)

在这里插入图片描述

7.2 数学函数

三角函数:sin()、cos()、tan()
反三角函数:arcsin()、arccos()和arctan()
将弧度转换为角度:degrees()函数
在这里插入图片描述

7.3 舍入函数

7.3.1 around()函数

返回指定数字的四舍五入值

# 语法格式
around(array,decimals)
  • array表示数组
  • decimals表示舍入的小数位数,默认值为0,如果为负,整数将四舍五入到小数点左侧的位置。
    在这里插入图片描述

7.3.1 floor()函数&ceil()函数

floor()函数用于返回小于或者等于指定表达式的最大整数,即向下取整。

ceil()函数用于返回大于或者等于指定表达式的最小整数,即向上取整。

语法格式
floor(n); ceil(n)
  • n为要取整的数
    在这里插入图片描述

7.4 算术函数

add(),subtract(),multiply()和divide()是简单的加减乘除运算,也是基本的运算。

reciprocal()函数:返回参数元素的倒数。

mod()函数、remainder()函数:计算输入数组中相应元素的相除后的余数

7.4.1 power()函数

第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

# 语法格式
power(a,b)
  • a作为底数
  • b为幂值
    在这里插入图片描述

7.4 统计函数

7.4 1 amax()与amin()函数、ptp()函数

最大值amax()与最小值amin()函数:用于计算数组中的元素沿指定轴的最小大值和最小值。
ptp()函数:计算数组中元素最大值与最小值的差。

array1=np.arange(10)
np.amax(array1)
np.amin(array1)
np.ptp(array1)

在这里插入图片描述

7.4 2 percentile()函数

计算数组中的百分位数,百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。

percentile(array,q,axis)
  • array是输入数组;
  • q是要计算的百分位数,在0~100之间;
  • axis是沿着它计算百分位数的轴
array1=np.arange(10)
np.percentile(array1,50)
np.percentile(np.arange(0,9),50)

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

7.4 3 median()函数

计算数组array中元素的中位数(中值)

array1=np.arange(10)
np.median(array1)

在这里插入图片描述

np.median(np.arange(1,9))

在这里插入图片描述

7.4 4 mean()函数

返回数组中元素的算术平均值。

如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。

np.mean(np.arange(1,9))

在这里插入图片描述

7.4 5 average()函数

根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值;该函数可以接受一个轴参数,如果没有指定轴,则数组会被展开。加权平均值即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。

np.average(np.arange(70,89))

在这里插入图片描述

np.average(np.arange(1,9),weights=np.arange(0,8))

在这里插入图片描述

7.4 6 标准差std()函数与方差var()函数

标准差是一组数据平均值分散程度的一种度量,而统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,其中,标准差是方差的平方根。

np.std(np.arange(1,9))

在这里插入图片描述

7.5 线性代数

函数描述
dot()两个数组的点积,即元素对应相乘
vdot()两个向量的点积
inner()两个数组的内积
matmul()两个数组的矩阵积
determinant()数组的行列式
solve()求解线性矩阵方程
inv()计算矩阵的乘法逆矩阵

7.5.1 dot()函数

对于两个一维的数组,计算的是这两个数组的乘法。

import numpy as np
a=np.array ([1,2,3,4])
b=np.array([1,2,3,4])
ans=np.dot (a, b)#1*1+2*2+3*3+4*4
print(ans)

a=np.array(([[1,2], [3,4]]) )
b=np.array(([[1,2,3], [4,5,6]]) )
aans=np.dot(a,b)#a.shape=(2,2),b.shape= (2,3),ans.shape(2,3) 即矩阵乘
print(aans)

在这里插入图片描述

7.5.2 vdot()函数

计算两个向量的点积。

import numpy as np
a=np.array([1,2,3,4])
b=np.array( [1,2,3,4])
ans=np. vdot (a, b) #1*1+2*2+3*3+4*4
print(ans)

在这里插入图片描述

7.5.3 linalg.det()函数

用于计算输入矩阵的行列式。

import numpy as np
a= np. array([[1,2], [3,4]])
ans = np.linalg. det (a) #1*4-2*3=-2
print(ans)

b= np.array([[6, 1, 1], [4,-2,5], [2,8,7]])
ans = np. linalg.det(b)
print(ans)
print(6*(-2*7-5*8)-1*(4*7 -5*2)+1*(4*8--2*2))

在这里插入图片描述

7.5.4 linalg.solve()函数

用于求矩阵形式的线性方程的解。

A=np.array([[2,2,2], [0,2,4], [2,5,-2]])
B=np.array([[5], [-3], [26]])
X=np. linalg. solve(A,B)#先传入A(系数矩阵),B(结果矩阵),返回解矩阵X
print("线性方程组的解:\n",X)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅述 国产仪器仪表 4455D 4455E 4455F数字示波器

4455系列数字示波器具有12bit垂直分辨率, 5GSa/s最高采样速率,500Mpts/CH存储深度,模拟带宽500MHz、1GHz、2GHz,为您提供高分辨率信号采集与波形分析体验。4455系列数字示波器具有波形自动设置、波形参数自动测量与统计、光标测量…

银行数字化转型导师坚鹏:商业银行大数据风控建模方法与案例

商业银行大数据风控建模方法与案例 课程背景: 数字化背景下,很多银行存在以下问题: 不清楚商业银行大数据风控建模方法? 不清楚银行大数据风控建模应用案例? 不知道银行大数据风控建模核心内容? 课…

【源码解析】Spring事务 @Transactional 源码解析

源码解析 自动化配置 在spring-boot-autoconfigure查看spring.factories引入TransactionAutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration\ org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\查看Tran…

大数据之Spark运行流程

文章目录 前言(一)Spark On Yarn集群的Client模式运行流程(二) Spark On Yarn集群的Cluster模式运行流程总结 前言 #博学谷IT学习技术支持# 上篇文章有讨论到Spark On Yarn的两种部署模式,如果有不清楚的地方&#xf…

java ssm高校学术会议论文管理系统

在研究课题--学术会议论文管理系统的实现与设计,对操作使用的便利性,系统的可制定性和安全性以及管理的全面性等多个方面研究。其中主要研究的内容是将学术会议论文管理系统功能划分为: 通知类型、通知信息、部门信息、用户信息用户反馈、会议类型、会议…

JavaScript(JS)-1.JS入门

1.JavaScript概念 (1)JavaScript是一门跨平台,面向对象的脚本语言,来控制网页行为的,它能使网页可交互 (2)W3C标准:网页主要由三部分组成 ①结构:HTML负责网页的基本结构(页面元素和内容)。 …

4.6 曲线拟合的最小二乘法

4.6.1 最小二乘问题的提法 学习目标: 要学习曲线拟合的最小二乘法,我会按照以下步骤进行: 理解最小二乘法的基本思想和原理,即在已知数据的情况下,通过拟合一条曲线,使得曲线与数据之间的误差最小化。 …

科技创新催生新动能,“云游戏+”打通数字经济任督二脉

配图来自Canva可画 利好政策接连发布,人工智能、云计算等前沿技术席卷各行各业,传统行业网络化、数字化、智能化转型已不可逆,数字经济将迎来大爆发。 国务院发展研究中心市场经济研究所所长王微在中国发展高层论坛2023年年会上表示&#x…

< elementUi组件封装: 通过 el-tag、el-popover、vue动画等实现公告轮播 >

文章目录 👉 前言👉 一、效果演示👉 二、实现思路👉 三、实现案例往期内容 💨 👉 前言 在 Vue elementUi 开发中,遇到这么一个需求,要实现公告轮播的效果。说实话,一开…

大家进来了解2023年6月CDGA/CDGP数据治理认证考试报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

多个微服务怎么放入一个tomcat

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

(一)Linux 环境下搭建 ElasticSearch (CentOS 7)

目录 1、搭建 Linux 相关环境 2、执行解压操作 3、创建新用户 4、修改配置文件 elasticsearch.yml 5、启动 ElasticSearch 6、修改虚拟机配置文件 7、重新启动 ElasticSearch 8、查看是否启动命令 9、访问 ElasticSearch 1、搭建 Linux 相关环境 没有服务器安装VM&a…

Golang每日一练(leetDay0043)

目录 127. 单词接龙 Word Ladder 🌟🌟🌟 128. 最长连续序列 Longest Consecutive Sequence 🌟🌟 129. 求根节点到叶节点数字之和 Sum Root-to-leaf Numbers 🌟🌟 🌟 每日一练…

QML控件和对话框之ApplicationWindows

ApplicationWindows ApplicationWindows应用程序窗口Action菜单类控件3.StatusBar4.工具栏控件类 ApplicationWindows应用程序窗口 Application Window在 Qt Quick Controls中类似于QMain Window 在 Qt/C中的角色,ApplicationWindow可以充当应用程序顶层窗口&#…

气传导耳机是什么原理?气传导蓝牙耳机优缺点分析

气传导耳机,简而言之,就是一种通过空气振动进行声音传播的耳机,采用波束成形技术进行定向传音,开放双耳设计模式,将音频传送到耳朵。 其发声途径,和我们双耳聆听到环境音以及人声的途径都是一样的&#xf…

UART协议——异步全双工串行通信方式

文章目录 前言一、简介1、优点2、缺点 二、数据格式三、波特率1、定义2、波特率和采样频率 四、常见接口电平1、TTL电平2、RS232(负逻辑)3、RS485 前言 2023.4.22 世界地球日 一、简介 UART:Universal Asynchronous Receiver/Transmitter&a…

数据驱动+AI引擎,为MarTech打开全新的想象空间

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近年来,随着全球数字化、信息化进程不断提速,企业营销的战场也逐渐转移至线上。一方面,消费者行为的数字化使得企业营销活动更加依赖于线上数字营销;另一方面,包括…

Python3 字符串

Python3 字符串 字符串是 Python 中最常用的数据类型。我们可以使用引号( 或 " )来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: var1 Hello World! var2 "Runoob" Python 访问字符串中的值 Python 不支持单字符…

MySQL-CENTOS7下MySQL单实例安装

MySQL单实例安装 1 版本下载2 MySQL安装2.1 创建目录并解压2.2 安装数据库2.3 安装RPM包2.4 启动服务2.5 连接MYSQL 3 MYSQL卸载卸载4 FAQ 1 版本下载 mysql下载 选择对应的版本。我选择的是的8.0.31的版本。 2 MySQL安装 2.1 创建目录并解压 mkdir /mysql mkdir /mysql/s…

chatgpt智能提效职场办公-ppt怎么转pdf文件

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 要将PPT转为PDF文件,可以按照以下步骤操作: 1.打开PPT文件,点击“文件”菜单,选择“导出…