当前位置: 首页 > article >正文

Python学习之numpy

Python学习之numpy

数组是Numpy库的核心数据结构。

NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。

Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。

数组的创建

# 创建数组的基本方式-向np.array传入一个列表
a = np.array([1,2,3])
b = np.array([[1,2,3],[4,5,6]])
# 索引数组中的数字
print(a[0])
print(b[0,0])# 其他创建数组的方式如下# np.zeros()
a = np.zeros(2)#创建一个长度为2的全0数组,向np.zeros()中传递的参数是一个表示数组形状(shape)的元组
print(a)
b = np.zeros((2,2))#创建一个长度为2*2的全0数组
print(b)#np.ones()
a = np.ones(2) #创建一个长度为2的全1数组
print(a)
b = np.ones((2,2)) #创建一个长度为2*2的全1数组
print(b)# np.full()
a = np.full(2,7) #创建一个长度为2的数组,每个元素都是7
print(a)
b = np.full((2,2),7) #创建一个长度为2*2的数组,每个元素都是7
print(b)#np.arange()
a = np.arange(1,10,1) #创建一个数组,元素为1到9,步长为1
print(a)
b = np.arange(1,10,2) #创建一个数组,元素为1到9,步长为2
print(b)# np.linspace()应用十分广泛,在可视化以及数值计算中都会用到,名字来源于“linear space”(线性空间),因为它在指定的范围内均匀地生成数值。
a = np.linspace(0,1,5) #创建一个数组,元素为0到1,共5个数
print(a)# 在创建数组时,可以指定数据类型
a = np.array([1,2,3], dtype=float)
print(a)
b = np.array([1,2,3], dtype=np.int32)
print(b)# 由于在现实应用中,二维数组(矩阵)最为常见,下面局里一个单位矩阵的例子
a = np.eye(2) # 创建一个2*2的单位矩阵
print(a)
b = np.eye(3) # 创建一个3*3的单位矩阵
print(b)

数组的索引与切片

# numpy中与list相似的索引与切片操作
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(a)
print("--------------------------")
b = a[:2,1:3] #取a的前两行,第2到第3列
print(b)
print("--------------------------")
c = a[0,1] #取a的第1行第2列
print(c)
print("--------------------------")
row_r1=a[1,:] #取a的第2行
print(row_r1)
print("--------------------------")
line = a[:,1] #取a的第2列
print(line)# 从数组中选择满足特定条件的值
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(a[a<5]) #取出a中小于5的元素
print(a[a>=5]) #取出a中大于等于5的元素
print(a[a%2==0]) #取出a中所有偶数
print(a[a%2!=0]) #取出a中所有奇数
print("--------------------------")
# 筛选出满足条件的元素,并将其赋值为0
a[a<5]=0
print(a)

元素的添加删除与排序,数组的拼接与拆分

# 元素的添加删除
a = np.array([1,2,3])
a = np.append(a,4) #向数组a中添加元素4
print(a)
print("-----------------")a = np.array([1,2,3],[4,5,6])
a = np.append(a,[[7,8,9]], axis=0) #向数组中添加一行
print(a)
print("-----------------")a = np.append(a,[[10],[11],[12]], axis=1) #向数组中添加一列a = np.delete(a,1,axis=0) #删除数组中第二行a = np.delete(a,1,axis=1) #删除数组中第二列a = np.insert(a,1,[1,2,3],axis=0) #在数组a中的第二行插入元素a = np.insert(a,1,5,axis=1) #在数组a中的第二列插入元素
# 数组的拼接
a = np.array([[1,2],[3,4]])
b = np.array([5,6])
c = np.concatenate((a,b),axis=0) #在数组a的下方拼接数组ad = np.array([[5],[6]])
e = np.concatenate((a,b),axis=1) #在数组a的右边拼接数组a,注意b和d数组的书写方式不同
# 数组的拆分
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
b = np.hsplit(a,2) #将数组a进行水平拆分,拆成2个数组
b = np.vsplit(a,2) #将数组a进行垂直拆分,拆成3个数组

注意:在数组拆分的过程中,使用np,vslit进行垂直拆分的时候,看上去是对数组进行了水平拆分,其实要堪称数组在内存中的存储形式,[[1,2,3,4],[5,6,7,8],[9,10,11,12]],进行垂直拆分就是3个数组,如果写成数学上的矩阵,就是“水平”拆分,其实是垂直拆分,要注意区别

# 数组的排序
a = np.array([3,2,1])
b = np.sort(a) #对数组a及进行(默认升序)排序a = np.array([4,3,5],[1,2,1])
b = np.sort(a,axis=1) #按行排序
b = np.sort(a,axis=0) #按列排序
# 了解numpy数组的形状,大小,维度
a = np.array([[1,2,3],[4,5,6]])
print(a.shape) #数组a形状
print(a.size) #数组a的大小
print(a.ndim) #数组a维度 number of array dimensions
#Numpy数组的重塑 np.reshape()方法
a = np.array([[1,2,3],[4,5,6]])b = np.reshape(3,2) #将数组a重塑为3行2列c = np.reshape(6,1) #将数组a重塑为6行1列d = np.reshape(1,6) #将数组a重塑为1行6列(二维)e = np.reshape(6) #将数组a重塑为1行6列(一维)
# numpy数组维度的交换 np.transpose()方法
a = np.array([[1,2,3],[4,5,6]])
b = a.T #对数组a进行转置#二维变一维 展平操作 np.flaten()
c = a.flatten() #将数组a变为一维数组#一维变二维
d = c.reshape(2,3) #将数组c重塑为2行3列
#numpy数组的运算
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(a+b) #矩阵a与矩阵b的对应位置加法运算
print(a-b) #矩阵a与矩阵b的对应位置减法运算
print(a*b) #矩阵a与矩阵b的对应位置乘法运算,并非线性代数中的矩阵乘法
print(a/b) #矩阵a与矩阵b的对应位置除法运算
print(np.dot(a,b)) #线性代数中的矩阵乘法
print(a+1) #数组中每个元素+1
print(a*1) #数组中每个元素*1
# numpy数组的广播机制
# 广播机制:NumPy的广播机制允许在不同形状的数组之间进行算术运算,自动扩展较小的数组以匹配较大的数组形状
# 广播机制的规则:如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的
#广播机制的核心规则‌
#维度对齐‌:从右向左按元素比较形状,不足的维度在左侧补1。
#兼容性检查‌:每个维度的大小必须满足以下之一:
#	相等
#	其中一个为1(该维度会被扩展)
# 广播机制的目的:是为了使两个数组的形状相同,以便进行数学运算
a = np.array([[1,2,3],[4,5,6]])
b= np.array([1,2,3]) #由于b是以为数组故其形状为(3,)表示三列,如果b是二维数组的话则表示为(1,3)一行三列
print(b)
print(b.shape)
print(a.shape)
print(a+b) 
#a的形状为(2,3),b的形状为(3,),则b的形状就会沿着维度为1的维度进行扩展,变成(1,3),再与a的形状进行匹配,最终两#个数组的形状变成(2,3),可进行加法运算
# 使用numpy数组进行数学运算
a = np.array([[1,2],[3,4]])
print(np.sum(a)) #计算数组a中所有元素的和
print(np.sum(a,axis=0)) #计算数组a中每一列的和
print(np.sum(a,axis=1)) #计算数组a中每一行的和
print(np.mean(a)) #计算数组a中所有元素的平均值print(np.max(a)) #计算数组a中所有元素的最大值
print(np.max(a,axis=0)) #计算数组a中每一列的最大值
print(np.max(a,axis=1)) #计算数组a中每一行的最大值#numpy中的数学函数
print(np.exp(a)) #计算数组a中每个元素的指数
print(np.log(a)) #计算数组a中每个元素的自然对数
print(np.sqrt(a)) #计算数组a中每个元素的平方根
print(np.sin(a)) #计算数组a中每个元素的正弦值
print(np.cos(a)) #计算数组a中每个元素的余弦值
print(np.tan(a)) #计算数组a中每个元素的正切值
# 使用numpy生成随机数
# 随机种子
np.random.seed(114514)a = np.random.random(2) #生成一个长度为2的随机数组
b = np.random.random((2,2)) #生成一个长度为2*2的随机数组
c = np.random.randint(1,10,2) #生成一个长度为2的随机整数数组
d = np.random.randn(2) #生成一个长度为2的服从标准正态分布的随机数组  n:normal
e = np.random.uniform(0,1) #生成一个服从0到1均匀分布的随机数

相关文章:

Python学习之numpy

Python学习之numpy 数组是Numpy库的核心数据结构。 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric&#xff0c;即 NumPy 的前身&#xff0c;是由 Jim Hugunin 开发的。 也开发了另一个包 Numarr…...

安装完 miniconda3 ,cmd无法执行 conda 命令

提示&#xff1a;安装 miniconda3 文章目录 前言一、安装二、安装完&#xff0c;cmd 无法执行 conda 前言 提示&#xff1a;版本 系统&#xff1a;win10 codna: miniconda3 安装完 miniconda3 &#xff0c;cmd无法执行 conda 命令 提示&#xff1a;以下是本篇文章正文内容&am…...

PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)

本文提供一个适用于图像输入的多头注意力机制&#xff08;Multi-Head Attention&#xff09;PyTorch 实现&#xff0c;适用于 ViT、MAE 等视觉 Transformer 中的注意力计算。 模块说明 输入支持图像格式 (B, C, H, W)内部转换为序列 (B, N, C)&#xff0c;其中 N H * W多头注…...

从 Credit Metrics 到 CPV:现代信用风险模型的进化与挑战

文章目录 一、信用风险基础二、Credit Risk 模型核心思想关键假设模型框架实施步骤优缺点适用场景 三、Credit Metrics 模型核心思想关键假设模型框架实施步骤优缺点适用场景 四、Credit Portfolio View 模型核心思想关键假设模型框架实施步骤优缺点适用场景 五、总结 一、信用…...

Docker快速安装MongoDB并配置主从同步

目录 一、创建相关目录及授权 二、下载并运行MongoDB容器 三、配置主从复制 四、客户端远程连接 五、验证主从同步 六、停止和恢复复制集 七、常用命令 一、创建相关目录及授权 创建主节点mongodb数据及日志目录并授权 mkdir -p /usr/local/mongodb/mongodb1/data mkdir …...

Kafka 中的事务

Kafka 中的 事务&#xff08;Transactions&#xff09; 是为了解决 消息处理的原子性和幂等性问题&#xff0c;确保一组消息要么全部成功写入、要么全部失败&#xff0c;不出现中间状态或重复写入。事务机制尤其适合于 “精确一次&#xff08;Exactly-Once&#xff09;” 的处理…...

C++ 内存访问模式优化:从架构到实践

内存架构概览&#xff1a;CPU 与内存的 “速度博弈” 层级结构&#xff1a;从寄存器到主存 CPU 堪称计算的 “大脑”&#xff0c;然而它与内存之间的速度差距&#xff0c;宛如高速公路与乡间小路。现代计算机借助多级内存体系来缓和这一矛盾&#xff0c;其核心思路是&#xf…...

Golang系列 - 内存对齐

Golang系列-内存对齐 常见类型header的size大小内存对齐空结构体类型参考 摘要: 本文将围绕内存对齐展开, 包括字符串、数组、切片等类型header的size大小、内存对齐、空结构体类型的对齐等等内容. 关键词: Golang, 内存对齐, 字符串, 数组, 切片 常见类型header的size大小 首…...

SOMEIP通信矩阵解读

目录 1 摘要2 SOME/IP通信矩阵详细属性定义与示例2.1 服务基础属性2.2 数据类型定义2.3 服务实例与网络配置参数2.4 SOME/IP-SD Multicast 配置&#xff08;SOME/IP服务发现组播配置&#xff09;2.5 SOME/IP-SD Unicast 配置2.6 SOME/IP-SD ECU 配置参数详解 3 总结 1 摘要 本…...

Excel + VBA 实现“准实时“数据的方法

Excel 本身是静态数据处理工具,但结合 VBA(Visual Basic for Applications) 可以实现 准实时数据更新,不过严格意义上的 实时数据(如毫秒级刷新)仍然受限。以下是详细分析: 1. Excel + VBA 实现“准实时”数据的方法 (1) 定时刷新(Timer 或 Application.OnTime) Appl…...

网络原理 - HTTP/HTTPS

1. HTTP 1.1 HTTP是什么&#xff1f; HTTP (全称为 “超文本传输协议”) 是⼀种应用非常广泛的应用层协议. HTTP发展史&#xff1a; HTTP 诞生于1991年. 目前已经发展为最主流使用的⼀种应用层协议 最新的 HTTP 3 版本也正在完善中, 目前 Google / Facebook 等公司的产品已经…...

C++设计模式-解释器模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析

一、解释器模式的基本介绍 1.1 模式定义与核心思想 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心思想是为特定领域语言&#xff08;DSL&#xff09;定义语法规则&#xff0c;并构建一个解释器来解析和执行该语言的句子。它…...

OCC Shape 操作

#pragma once #include <iostream> #include <string> #include <filesystem> #include <TopoDS_Shape.hxx> #include <string>class GeometryIO { public:// 加载几何模型&#xff1a;支持 .brep, .step/.stp, .iges/.igsstatic TopoDS_Shape L…...

深度学习入门(四):误差反向传播法

文章目录 前言链式法则什么是链式法则链式法则和计算图 反向传播加法节点的反向传播乘法节点的反向传播苹果的例子 简单层的实现乘法层的实现加法层的实现 激活函数层的实现ReLu层Sigmoid层 Affine层/SoftMax层的实现Affine层Softmax层 误差反向传播的实现参考资料 前言 上一篇…...

Linux:页表详解(虚拟地址到物理地址转换过程)

文章目录 前言一、分页式存储管理1.1 虚拟地址和页表的由来1.2 物理内存管理与页表的数据结构 二、 多级页表2.1 页表项2.2 多级页表的组成 总结 前言 在我们之前的学习中&#xff0c;我们对于页表的认识仅限于虚拟地址到物理地址转换的桥梁&#xff0c;然而对于具体的转换实现…...

AF3 OpenFoldDataLoader类解读

AlphaFold3 data_modules 模块的 OpenFoldDataLoader 类继承自 PyTorch 的 torch.utils.data.DataLoader。该类主要对原始 DataLoader 做了批数据增强与控制循环迭代次数(recycling)相关的处理。 源代码: class OpenFoldDataLoader(torch.utils.data.DataLoader):def __in…...

初见TypeScript

类型语言&#xff0c;在代码规模逐渐增大时&#xff0c;类型相关的错误难以排查。TypeScript 由微软开发&#xff0c;它本质上是 JavaScript 的超集&#xff0c;为 JavaScript 添加了静态类型系统&#xff0c;让开发者在编码阶段就能发现潜在类型错误&#xff0c;提升代码质量&…...

常见的 JavaScript 框架和库

在现代前端开发中&#xff0c;JavaScript框架和库成为了构建高效、可维护应用程序的关键工具。本文将介绍四个常见的JavaScript框架和库&#xff1a;React、Vue.js、Angular 和 Node.js&#xff0c;并探讨它们的特点、使用场景及适用场合。 1. React — 构建用户界面的JavaScri…...

机器学习代码基础——ML2 使用梯度下降的线性回归

ML2 使用梯度下降的线性回归 牛客网 描述 编写一个使用梯度下降执行线性回归的 Python 函数。该函数应将 NumPy 数组 X&#xff08;具有一列截距的特征&#xff09;和 y&#xff08;目标&#xff09;作为输入&#xff0c;以及学习率 alpha 和迭代次数&#xff0c;并返回一个…...

PostgreSQL 一文从安装到入门掌握基本应用开发能力!

本篇文章主要讲解 PostgreSQL 的安装及入门的基础开发能力,包括增删改查,建库建表等操作的说明。navcat 的日常管理方法等相关知识。 日期:2025年4月6日 作者:任聪聪 一、 PostgreSQL的介绍 特点:开源、免费、高性能、关系数据库、可靠性、稳定性。 官网地址:https://w…...

WEB安全--内网渗透--LMNTLM基础

一、前言 LM Hash和NTLM Hash是Windows系统中的两种加密算法&#xff0c;不过LM Hash加密算法存在缺陷&#xff0c;在Windows Vista 和 Windows Server 2008开始&#xff0c;默认情况下只存储NTLM Hash&#xff0c;LM Hash将不再存在。所以我们会着重分析NTLM Hash。 在我们内…...

查询条件与查询数据的ajax拼装

下面我将介绍如何使用 AJAX 动态拼装查询条件和获取查询数据&#xff0c;包括前端和后端的完整实现方案。 一、前端实现方案 1. 基础 HTML 结构 html 复制 <div class"query-container"><!-- 查询条件表单 --><form id"queryForm">…...

8.用户管理专栏主页面开发

用户管理专栏主页面开发 写在前面用户权限控制用户列表接口设计主页面开发前端account/Index.vuelangs/zh.jsstore.js 后端Paginator概述基本用法代码示例属性与方法 urls.pyviews.py 运行效果 总结 欢迎加入Gerapy二次开发教程专栏&#xff01; 本专栏专为新手开发者精心策划了…...

室内指路机器人是否支持与第三方软件对接?

嘿&#xff0c;你知道吗&#xff1f;叁仟室内指路机器人可有个超厉害的技能&#xff0c;那就是能和第三方软件 “手牵手” 哦&#xff0c;接下来就带你一探究竟&#xff01; 从技术魔法角度看哈&#xff1a;好多室内指路机器人都像拥有超能力的小魔法师&#xff0c;采用开放式…...

Apache BookKeeper Ledger 的底层存储机制解析

Apache BookKeeper 的 ledger&#xff08;账本&#xff09;是其核心数据存储单元&#xff0c;底层存储机制结合了日志追加&#xff08;append-only&#xff09;、分布式存储和容错设计。Ledger 的数据存储在 Bookie 节点的磁盘上&#xff0c;具体实现涉及 Journal&#xff08;日…...

从代码上深入学习GraphRag

网上关于该算法的解析都停留在大概流程上&#xff0c;但是具体解析细节未知&#xff0c;由于代码是PipeLine形式因此阅读起来比较麻烦&#xff0c;本文希望通过阅读项目代码来解析其算法的具体实现细节&#xff0c;特别是如何利用大模型来完成图谱生成和检索增强的实现细节。 …...

通俗地讲述DDD的设计

通俗地讲述DDD的设计 前言为什么要使用DDDDDD架构分层重构实践关键问题解决方案通过​​领域事件机制​​解耦服务依赖&#xff1a;防止逻辑下沉 领域划分电商场景下的领域划分 结语完结撒花&#xff0c;如有需要收藏的看官&#xff0c;顺便也用发财的小手点点赞哈&#xff0c;…...

【Redis】通用命令

使用者通过redis-cli客户端和redis服务器交互&#xff0c;涉及到很多的redis命令&#xff0c;redis的命令非常多&#xff0c;我们需要多练习常用的命令&#xff0c;以及学会使用redis的文档。 一、get和set命令&#xff08;最核心的命令&#xff09; Redis中最核心的两个命令&…...

网络安全技术文档

网络安全技术文档 1. 概述 网络安全是指通过技术手段和管理措施&#xff0c;保护网络系统的硬件、软件及其数据不受偶然或恶意破坏、更改、泄露&#xff0c;确保系统连续可靠运行&#xff0c;网络服务不中断。 2. 常见网络威胁 2.1 攻击类型 DDoS攻击&#xff1a;分布式拒…...

微前端随笔

✨ single-spa&#xff1a; js-entry 通过es-module 或 umd 动态插入 js 脚本 &#xff0c;在主应用中发送请求&#xff0c;来获取子应用的包&#xff0c; 该子应用的包 singleSpa.registerApplication({name: app1,app: () > import(http://localhost:8080/app1.js),active…...