Python学习之numpy

news2025/4/8 19:47:10

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的下方拼接数组a

d = 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均匀分布的随机数

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

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

相关文章

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

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

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

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

Golang系列 - 内存对齐

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

网络原理 - HTTP/HTTPS

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

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;然而对于具体的转换实现…

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。 在我们内…

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

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

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

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

从代码上深入学习GraphRag

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

【Redis】通用命令

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

微前端随笔

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

C++中的浅拷贝和深拷贝

浅拷贝只是将变量的值赋予给另外一个变量&#xff0c;在遇到指针类型时&#xff0c;浅拷贝只会把当前指针的值&#xff0c;也就是该指针指向的地址赋予给另外一个指针&#xff0c;二者指向相同的地址&#xff1b; 深拷贝在遇到指针类型时&#xff0c;会先将当前指针指向地址包…

车载诊断架构 --- 整车重启先后顺序带来的思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

【C++11(下)】—— 我与C++的不解之缘(三十二)

前言 随着 C11 的引入&#xff0c;现代 C 语言在语法层面上变得更加灵活、简洁。其中最受欢迎的新特性之一就是 lambda 表达式&#xff08;Lambda Expression&#xff09;&#xff0c;它让我们可以在函数内部直接定义匿名函数。配合 std::function 包装器 使用&#xff0c;可以…

Windows 10/11系统优化工具

家庭或工作电脑使用时间久了&#xff0c;会出现各种各样问题&#xff0c;今天给大家推荐一款专为Windows 10/11系统设计的全能优化工具&#xff0c;该软件集成了超过40项专业级实用程序&#xff0c;可针对系统性能进行深度优化、精准调校、全面清理、加速响应及故障修复。通过系…

浅谈在HTTP中GET与POST的区别

从 HTTP 报文来看&#xff1a; GET请求方式将请求信息放在 URL 后面&#xff0c;请求信息和 URL 之间以 &#xff1f;隔开&#xff0c;请求信息的格式为键值对&#xff0c;这种请求方式将请求信息直接暴露在 URL 中&#xff0c;安全性比较低。另外从报文结构上来看&#xff0c…

LightRAG实战:轻松构建知识图谱,破解传统RAG多跳推理难题

作者&#xff1a;后端小肥肠 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 2025防失业预警&#xff1a;不会用DeepSeek-RAG建知识库的人正在被淘汰_deepseek-embedding-CSDN博客 从PDF到精准答案&#xff1a;Coze…