Numpy科学计算基础库--numpy基础知识

news2025/1/12 12:08:44

  对数组执行数学运算逻辑运算时,Numpy 是非常有用的。在用 Python 对 n 维数组和矩阵进行运算时,Numpy 库提供了大量有用特征。Numpy 库数组有两种形式:向量和矩阵。严格地讲,向量是一维数组,矩阵是多维数组。在某些情况下,矩阵只有一行或一列。  
  在导入 Numpy 库时,我们通过 as 将 np 作为 Numpy 的别名,导入方式如下。  
> import numpy as np  

import np as numpy

### 1.1创建数组

my_list = [1, 2, 3, 4, 5]
my_numpy_list = np.array(my_list)                #通过列表参数传入数组
print(my_numpy_list)
my_list.append(6)                               #列表中添加新元素,只能添加一个
my_numpy_list1 = np.array(my_list)
my_numpy_list1
print(type(my_numpy_list1))

my_turple = (1, 2, 3, 4, 5)
my_numpy_turple = np.array(my_turple)               #通过元组传入
my_numpy_turple

c = np.arange(1,10,2)
c

np.arange函数作用

np.arange函数用于创建具有等差数列的数组。可以通过指定其步幅和范围内生成的元素数量来创建等距离的数字序列。

stop值不包括在内

a = my_numpy_list1
a+1

my_numpy_list.dtype  #也可以指定类型

np.array(my_list, dtype=np.float64) #指定数据类型

q = my_numpy_list.astype(int)     
q.dtype

type(my_list)

type(my_turple )

## 函数说明

✪type() :返回数据结构类型(list、dict、numpy.ndarray 等)

✪dtype():返回数据元素的数据类型(int、float等)

备注:

1)由于 list、dict 等可以包含不同的数据类型,因此不可调用dtype()函数

2)np.array 中要求所有元素属于同一数据类型,因此可调用dtype()函数

astype()改变np.array中所有数据元素的数据类型。能用dtype() 才能用 astype()

### 1.2 创建多维数组

my_list0 = [[1,2,3,9],[5,4,0,3],[7,4,8,1]]
mn = np.array(my_list0)                     #创建二维数组,几层中括号就是几维数组
mn

my_list1 = [[[1,2,3,9],[5,4,0,3],[7,4,8,1]]]
nm = np.array(my_list1)                     #创建二维数组,几层中括号就是几维数组
nm

mn.tolist()   #数组转化为列表

mn.shape    #查看数组的形状、维度、大小

.shape对于二维数组来说是测定行和列,这个是测定数组长度的。我们通常在不知道它有多少数据的时候,我们想求平均数,我们不知道它有多少数据,我们用shape[0]就知道它有多少行,如果你不想用shape,直接用lens加数组名就可以,就可以知道有多少行了

和.size的区别是,.size你有多少个

mn.shape =(2,6)   #修改数组的形状
mn

mn.shape = (-1,3)   #注意-1的作用,-1的作用是只管有三列,具体的多少行由机器去计算得知
mn

-1的意思就是不管你有多少行,只要保证是三列就可以

mn.shape = (6,-1)
mn

mn = np.array(my_list0).reshape(4,3) #改变数组的形状
mn

### 1.3 创建特殊数组

np.zeros(5)   #产生全0数组

np.ones(3)   #产生全1数组

zero = np.zeros((2,3))   #产生形状为(2,3)全0的数组
zero

one = np.ones((2,6,3)) #产生形状为(6,3)全1的数组
one

np.full((2,3),8)  #产生 按照形状填充指定的元素

np.eye(6) #产生单位矩阵

### 1.4 随机数组

☯np.random.rand()可以生成一个从 0~1 均匀产生的随机数组成的数组。  

☯np.random.randn()可以从以 0 为中心的标准正态分布或高斯分布中产生随机样本。  

☯np.random.randint()在半开半闭区间[low,high)上生成离散均匀分布的整数值;若high=None,则取值区间变为[0,low)

np.random.rand(5)#可以在[0,1]间生成一个均匀的随机数组

np.random.rand(5, 4)

np.random.randn(3)#可以从以 0 为中心的标准正态分布或高斯分布中产生随机样本

np.random.randn(3,5)

np.random.randint(7)#在半开半闭区间[low,high)上生成离散均匀分布的整数值;若high=None,则取值区间变为[0,low)

np.random.randint(4,7)

np.random.randint(1,7,4)

np.random.randint(10, 15, size=(2,3)) 

np.random.randint(10, size=(2,3))  #同 np.random.randint(10, high=None, size=(2,3)) 

✪ 其他创建特殊数组的方法如下。

np.empty((m,n)) : 创建 m 行 n 列,未初始化的二维数组。

np.ones_like(a) :根据数组 a 的形状生成一个元素全为 1 的数组。

np.zeros_like(a) :根据数组 a 的形状生成一个元素全为 0 的数组。

np.full_like(a,val) :根据数组 a 的形状生成一个元素全为 val 的数组。

np.empty((2,3),np.int):只分配内存,不进行初始化。

a=np.empty((3,3))
a

a=np.array([[1,2,3],[4,5,6]])
print("a=",a)
b=np.ones_like(a)
b

#### 1.5 测定数组的长度大小

测定数组的长度、以及包含数据的多少可用len和size。  

> 注意:len 和 size 的区别,len 是指<font color="red">元素</font>的个数,

而 size 是指数据的个数,也就是说元素可以包含多个数据。

len(mn)  #查阅数组有多少行
len(one)
mn.size   #查阅数组有多少个数据,即:行数*列数
np.random.randint(2, 100, 24).reshape((3,8))  #修改数组的形状

从2到100之间产生24个随机整数,并生成一个3*8的随机数组,reshape的格式,就把你需要的维度传进去就可以了,可以是随机正态分布的,也可以是均匀正态分布的。正态分布的数据最有用,然后是均匀分布,之后是随机整数

mn.reshape((3,-1))

####  1.6 访问数组(索引和切片)

a=np.array([1,2,3,4,5])

a[::-1]   #5,4

正着的索引是从0开始的,倒着的索引从-1开始,这就是数组的逆序输出

a=np.random.randint(1, 15, 24).reshape((3,8)) 
a

只要元素个数不变的情况下,可以给她变成任意形状,可以变成一维,二维,三维都行,只要他们乘起来是24就可以

b = a.reshape((2,3,4))#将 a 改为三维数组
b
b[1,1,3] #访问索引号为[1,1,3]位置上的元素 ? 你猜猜是几?第一维度是页,第二维度是行,第三维度是列

注意!!!!!!考试重点

页索引,行索引,列索引都是从0开始的

 b[:,2:,2] #访问元素4个,每个维度一个切片值,用逗号分隔。  

不写就代表所有,后面不写就代表到最后,前面不写就代表从最头,:前后都不写从头到尾,:后面写了,都是左闭右开的,二维数组的切片,切完应该还是个二维数组

#更多的时候是访问符合条件的元素,如条件为 c[x][y],x 和 y 为条件
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) 
c

c[: , 2][c[: , 0] < 5]

[: , 2]表示取所有行的第 3 列(第 3 列索引号为 2)

(所有的行第三列,刚才切片访问三维的返回的是二维的,二维的访问完之后是一维的,一定要注意降一维!!!!!!!!!)

[c[: , 0] < 5]表示取第一列(第 1 列索 引号为 0)值小于 5 所在的行(第 1、 2 行)

终表示取第 1、 2 行的第 3 列,得到结果 array([3, 6])这个“子”数组。

考试一定要注意最终结果的写法,降一维!!!!

所有行的第三列的值小于5的,返回的值是布尔值,按照布尔值进行取舍,是true的就留下来了,flase的就没了前面返回的是3,6,9,后面再给一个位置索引,所以返回值是3和6

c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) 
c

#经常用到查找符合条件元素的位置,这时可以使用 where()函数
np.where(c==4)   #查找c中数据4的位置

访问数据4的位置,第一列第二个数的索引是4,位置索引加1,把所有数索引的位置返给你

np.=e(c[: , 0] < 5)  #查找满足c[: , 0] < 5的结果

大于5的不显示,小于5的显示它的行索引

np.delete(c,1,0)  #a为数组,1为行的索引号,0表示axis=0

axis是数组的轴向

这个就是按行删除

####  1.7 数组的拼接与切分

数组的拼接 vstack 和 hstack 方法可以实现两个数组的“拼接” 。

np.vstack((a,b)):将数组 a、b 竖直拼接(vertical)。

np.hstack((a,b)):将数组 a、b 水平拼接(horizontal)

    

vsplit 和 hsplit 方法可以实现对数组“切分”,返回的是列表。

np.vsplit(a,v):将 a 数组在水平方向切成 v 等分。

np.hsplit(a,v):将 a 数组在垂直方向切成 v 等分。

m = np.full((2,3),2) 
m

n = np.ones((2,3),dtype=np.int32)
n

p = np.vstack((m,n))   #垂直叠加
p

这是垂直叠加

q = np.hstack((m,n)) #横向延展
q

这是水平叠加

x,y = np.hsplit(q,2) #横向等分切割,切割后为两个元素
y

#### 1.8 查重

对于一维数组或者列表,unique 函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表。  

>np.unique(a,return_index,return_inverse)  

>  a : 表示数组。   

>  return_index : Ture 表示同时返回原始数组中的下标。  

>  return_inverse: True 表示返回重建原始数组用的下标数组。

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

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

相关文章

Redis-数据过期策略

数据过期策略 惰性删除策略优点&#xff1a;对cpu比较友好&#xff0c;在用到该key的时候才去进行判断&#xff0c;对于很多用不到key不用浪费时间去检查是否过期缺点&#xff1a;对内存不友好&#xff0c;如果一个key过期了&#xff0c;但是我们又一直没有用到该key&#xff0…

基于YOLOv8的安全帽检测系统(4):EMA基于跨空间学习的高效多尺度注意力、效果优于ECA、CBAM、CA,助力行为检测 | ICASSP2023

目录 1.Yolov8介绍 2.安全帽数据集介绍 3.EMA介绍 4.训练结果分析 5.系列篇 1.Yolov8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它建立在先前YOLO…

Win11 安装 Vim

安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Ru7HhTSotz9mteHug-Yhpw?pwd6666 提取码&#xff1a;6666 双击安装包&#xff0c;一直下一步。 配置环境变量&#xff1a; 先配置系统变量中的path&#xff1a; 接着配置用户变量&#xff1a; 在 cmd 中输入…

MySQL 事务隔离级别与锁机制详解

目录 一、前言二、事务及其ACID属性三、并发事务处理带来的问题四、事务隔离级别4.1、隔离级别分类4.2、查看当前数据库的事务隔离级别:4.3、临时修改数据库隔离级别&#xff08;重启MySQL后恢复到配置中的级别&#xff09; 五、表数据准备六、MySQL常见锁介绍5.1、锁分类5.2、…

【网络安全 --- XSS漏洞利用实战】你知道如何利用XSS漏洞进行cookie获取,钓鱼以及键盘监听吗?--- XSS实战篇

一&#xff0c;XSS 实战 以pikachu靶场为例 1-1 盗取cookie 过程&#xff1a;想要盗取别人的cookie信息的话有一个前提条件&#xff0c;就是你应该在别人触发你的xss攻击时&#xff0c;你的代码应该将收集的cookie信息发送给你的平台来接收&#xff0c;这样才获取到了数据 …

图的广度遍历-邻接矩阵实现

description 本题要求实现邻接矩阵存储图的广度优先遍历。 函数接口定义&#xff1a; void BFS(MGraph G,Vertex i); 其中MGraph是邻接矩阵存储的图&#xff0c;定义如下&#xff1a; #define MaxVertexNum 10 /定义最大顶点数/ typedef int Vertex;/* 用顶点下标表示顶点,…

1799_GNU pdf阅读器evince_windows系统下编译尝试

全部学习汇总&#xff1a; GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 从网上下载下来了evince的代码&#xff0c;尝试做一个windows下的编译。 这应该是autotools的构建系统&#xff0c;先尝试运行confi…

java做个qq机器人

前置的条件 机器人是基于mirai框架实现的。根据官方的文档&#xff0c;建议使用openjdk11。 我这里使用的编辑工具是idea2023 在idea中新建一个maven项目&#xff0c;虽然可以使用gradle进行构建&#xff0c;不过我这里由于网络问题没有跑通。 pom.xml <dependency>&l…

提示msvcp140.dll丢失的5个解决方法,msvcp140.dll丢失问题全面分析

在我们的日常生活和工作中&#xff0c;电脑已经成为不可或缺的工具。然而&#xff0c;在使用电脑的过程中&#xff0c;我们经常会遇到各种问题&#xff0c;其中就包括提示 msvcp140.dll 丢失的问题。msvcp140.dll 是 Visual C Redistributable for Visual Studio 2015 的运行时…

堆--数组中第K大元素

如果对于堆不是太认识&#xff0c;请点击&#xff1a;堆的初步认识-CSDN博客 解题思路&#xff1a; /*** <h3>求数组中第 K 大的元素</h3>* <p>* 解体思路* <ol>* 1.向小顶堆放入前k个元素* 2.剩余元素* 若 < 堆顶元素, 则略过* …

SM5308 2.1A 充电 2.4 A 放电高集成度移动电源 SOC 可替代IP5306

SM5308 是一款集成升压转换器、锂电池充电管理、电池电量指示的多功能电源管理 SOC&#xff0c;为移动电源 提供完整的电源解决方案。 SM5308 的高集成度与丰富功能,使其在应用时仅需极少的外围器件,并有效减小整体方案的尺寸&#xff0c; 降低 BOM 成本。 SM5308 只需一个电…

竞赛选题 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

1797_GNU pdf阅读器evince

全部学习汇总&#xff1a; GreyZhang/g_GNU: After some years I found that I do need some free air, so dive into GNU again! (github.com) 近段时间经历了很多事情&#xff0c;终于想找一点技术上的自由气氛。或许&#xff0c;没有什么比GNU的一些软件探索更适合填充这样的…

千禧辣妹风穿搭必备——轻律U1头戴式耳机百搭不出错

千禧辣妹风的打造方法十分多样。我们可以在衣服造型多变&#xff0c;还可以在饰品上改造&#xff0c;从而打造出一种随性&#xff0c;辣妹炸眼的格调。特别是头戴式耳机很适合我们去塑造属于自己的千禧辣妹Y2K的美感&#xff0c;轻律umelody U1采用棕银配色&#xff0c;光是外观…

二叉树的遍历方式和代码

二叉树的三种遍历和代码 1.前序遍历2.中序遍历3.后序遍历4.三种遍历方式的代码实现 1.前序遍历 学习二叉树结构&#xff0c;最简单的方式就是遍历。所谓遍历(Traversal)是指沿着某条搜索路线&#xff0c;依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具…

如何使用 Bing Image Creator 创建图像(DALL-E3)

Bing Image Creator 是一个由微软开发的人工智能图像生成工具&#xff0c;可以根据用户的文字描述生成逼真的图像。该工具使用了 OpenAI 的 DALL-E 3 模型&#xff0c;可以生成各种各样的图像&#xff0c;包括人物、动物、场景、物体等。 使用 Bing Image Creator 创建图像 要…

VUE3照本宣科——路由与状态管理器

VUE3照本宣科——路由与状态管理器 前言一、路由&#xff08;router&#xff09;1.createRouter2.router-link3.router-view4.useRoute5.useRouter6.路由守卫7.嵌套路由 二、状态管理器&#xff08;Pinia&#xff09;1.定义Store&#xff08;1&#xff09;Option Store&#x…

用Python操作PPT的办公自动化教程

PPT通过其精美的可视化技巧以及良好的演示效果&#xff0c;成为了职场人士的必备技能。PPT的设计是一门大学问&#xff0c;无论是设计技巧&#xff0c;还是操作方法&#xff0c;都衍生出了专门的课程。 主要介绍Python操作PPT的技巧&#xff0c;编程的优势在于处理速度&#x…

李沐深度学习记录4:12.权重衰减/L2正则化

权重衰减从零开始实现 #高维线性回归 %matplotlib inline import torch from torch import nn from d2l import torch as d2l#整个流程是&#xff0c;1.生成标准数据集&#xff0c;包括训练数据和测试数据 # 2.定义线性模型训练 # 模型初始化&#xff08;函…

【docker】数据卷和数据卷容器

一、如何管理docker容器中的数据&#xff1f; 二、数据卷 1、数据卷原理 将容器内部的配置文件目录&#xff0c;挂载到宿主机指定目录下 数据卷默认会一直存在&#xff0c;即使容器被删除 宿主机和容器是两个不同的名称空间&#xff0c;如果想进行连接需要用ssh&#xff0c;…