Python---Numpy

news2024/11/17 17:23:13

文章目录

  • 1.Numpy是什么?
  • 2.ndarray
      • 2.1 什么是ndarray?
      • 2.2 ndarray的属性
      • 2.3 ndarray的类型
  • 3.Numpy基本操作
      • 3.1 生成0或1的数组
      • 3.2 从现有数组生成数组
          • 拓展:浅拷贝和深拷贝
      • 3.3 生成固定范围的数组
      • 3.4 生成随机数组
          • 3.4.1 正态分布
          • 3.4.2 均匀分布
      • 3.5 形状修改
      • 3.6 类型修改
      • 3.7 数组的去重
      • 3.8 数组的索引以及切片
  • 4.ndarray运算
      • 4.1 逻辑运算
          • 通用判断函数
      • 4.2 统计运算

1.Numpy是什么?

NumPy(Numerical Python)是一个强大的Python数值计算库。它提供对大型多维数组和矩阵的支持,并提供了许多高效操作这些数组的数学函数。 NumPy是Python科学计算的基础库,在诸如机器学习、数据科学、工程学和研究等领域得到广泛应用。
在这里插入图片描述
要使用NumPy,首先需要安装它。可以使用pip安装它:

pip install numpy

Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。

2.ndarray

2.1 什么是ndarray?

NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。
ndarray(N维数组)是NumPy库中最重要的数据结构之一。它是一个多维、同类型数据的容器,可以存储在内存中的连续块,提供了许多功能和操作来高效地处理大规模数值数据。
机器学习的最大特点就是大量的数据运算,那么如果没有一个快速的解决方案,那可能现在python也在机器学习领域达不到好的效果。
Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。
在这里插入图片描述
ndarray到底跟原生python列表有什么不同呢,请看一张图:
在这里插入图片描述
从图中我们可以看出ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。
这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python
原生list就只能通过寻址方式找到下一个元素
,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy
的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。此外ndarray支持并行化运算(向量化运算)。

使用numpy生成一个数组

import numpy as np

#使用numpy生成一个数组
a=np.array([1,2,3,4,5,6])
a

在这里插入图片描述

2.2 ndarray的属性

在这里插入图片描述

2.3 ndarray的类型

在这里插入图片描述

import numpy as np

# 创建不同形状的数组
# 二维数组
a=np.array([[1,2,3],[4,5,6]],dtype=int)
# 一维数组
b=np.array([1,2,3,4,5],dtype=int)
# 三维数组
c=np.array([[[1,2,3],[4,5,6]],[[2,7,8],[3,6,9]]],dtype=int)

# 打印数组的形状
a.shape
b.shape
c.shape

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

3.Numpy基本操作

3.1 生成0或1的数组

在这里插入图片描述

import numpy as np

#生成全是1的数组
np.ones([4,8])
ones

#生成全是0的数组
zeros=np.zeros([4,8])
zeros

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

3.2 从现有数组生成数组

在这里插入图片描述
当创建新的数组时,numpy.array() 默认会复制数据,以确保创建的数组与原始数据没有共享内存。这是所谓的“拷贝”操作。
numpy.asarray() 不会执行拷贝操作,而只是将该数组返回,这有助于节省内存和提高性能。

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
# 从现有的数组当中创建
a1 = np.array(a)
# 相当于索引的形式,并没有真正的创建一个新的
a2 = np.asarray(a)
拓展:浅拷贝和深拷贝

**浅拷贝是创建一个新的数据结构,并复制原始数据结构中的元素。**如果原始数据结构是一个单层结构(没有嵌套的对象),那么浅拷贝将复制所有元素。但是,如果原始数据结构中有嵌套的对象(如列表中嵌套了另一个列表,或字典中嵌套了另一个字典),浅拷贝将不会递归复制嵌套对象,而是复制它们的引用。
深拷贝是创建一个新的数据结构,并递归复制原始数据结构中的所有元素,包括嵌套对象。 这意味着原始数据结构中的每个元素及其嵌套的元素都将在新数据结构中独立存在,不共享引用。

3.3 生成固定范围的数组

np.linspace (start, stop, num, endpoint)
创建等差数组 — 指定数量

参数:
start:序列的起始值
stop:序列的终止值
num:要生成的等间隔样例数量,默认为50
endpoint:序列中是否包含stop值,默认为ture

np.linspace(0,100,11)

在这里插入图片描述

np.arange(start,stop, step, dtype)
创建等差数组 — 指定步长

参数 step:步长,默认值为1

np.arange(40,50,1)

在这里插入图片描述
np.logspace(start,stop, num)
创建等比数列

参数:
num:要生成的等比数列数量,默认为50

logspace(1, 3, 5) 返回一个包含 5 个均匀分布在对数刻度上的数据点的数组。这些数据点分别是 101,101.5,102,102.5 和 10^3。

3.4 生成随机数组

3.4.1 正态分布

正态分布是一种概率分布。正态分布是具有两个参数μ和σ的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ是此随机变量的标准差,所以正态分布记作N(μ,σ )。在这里插入图片描述
μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。在这里插入图片描述
正态分布的创建:

np.random.randn(d0, d1, …, dn)
功能:从标准正态分布中返回一个或多个样本值

np.random.normal(loc=0.0, scale=1.0, size=None) (常用)
loc:float 此概率分布的均值(对应着整个分布的中心centre)
scale:float 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size:int or tuple of ints
输出的shape,默认为None,只输出一个值

np.random.standard_normal(size=None)
返回指定形状的标准正态分布的数组。

eg:生成均值为1.75,标准差为1的正态分布数据,100000000个

import numpy as np
import matplotlib.pyplot as plt

x1=np.random.normal(1.75,1,100000000)

# 创建画布
plt.figure(figsize=(20,10),dpi=100)

# 绘制直方图
plt.hist(x1,1000)

# 显示
plt.show()

在这里插入图片描述

3.4.2 均匀分布

均匀分布是概率论和统计学中的一种重要概率分布,也称为均匀随机变量分布。在均匀分布中,所有可能的结果在某个范围内是等可能发生的,没有任何一个结果比其他结果更有可能发生。

np.random.rand(d0, d1, …, dn) 返回[0.0,1.0)内的一组均匀分布的数。

np.random.uniform(low=0.0, high=1.0, size=None) (常用)
功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high. 参数介绍: low:
采样下界,float类型,默认值为0; high: 采样上界,float类型,默认值为1;
size:
输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出mnk个样本,缺省时输出1个值。
返回值:ndarray类型,其形状和参数size中描述一致。

np.random.randint(low, high=None, size=None, dtype=‘l’)
从一个均匀分布中随机采样,生成一个整数或N维整数数组,
取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。

import numpy as np
import matplotlib.pyplot as plt

x1=np.random.uniform(-1,1,100000000)

# 创建画布
plt.figure(figsize=(20,10),dpi=100)

# 绘制直方图
plt.hist(x1,1000)

# 显示
plt.show()

在这里插入图片描述

3.5 形状修改

ndarray.reshape(shape, order)
返回一个具有相同数据域,但shape不一样的视图
行、列不进行互换

# 在转换形状的时候,一定要注意数组的元素匹配
stock_change.reshape([5, 4])
stock_change.reshape([-1,10]) # 数组的形状被修改为: (2, 10), -1: 表示通过待计算

ndarray.resize(new_shape)
修改数组本身的形状(需要保持元素个数前后相同)
行、列不进行互换

stock_change.resize([5, 4])
# 查看修改后结果
stock_change.shape
(5, 4)

ndarray.T
数组的转置
将数组的行、列进行互换

3.6 类型修改

ndarray.astype(type)
返回修改了类型之后的数组

3.7 数组的去重

np.unique()

import numpy as np

a=np.array([[1,2,3,4],[2,3,4,5],[5,6,7,7]])
b=np.unique(a)
b

在这里插入图片描述

3.8 数组的索引以及切片

直接进行索引,切片
对象[:, :] – 先行后列

import numpy as np

a=np.array([[1,2,3,4],[2,3,4,5],[5,6,7,7]])
a[0,0:2]

在这里插入图片描述

4.ndarray运算

4.1 逻辑运算

# 生成10名同学,5门功课的数据
>>> score = np.random.randint(40, 100, (10, 5))
# 取出最后4名同学的成绩,用于逻辑判断
>>> test_score = score[6:, 0:5]
# 逻辑判断, 如果成绩大于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]])
# BOOL赋值, 将满足条件的设置为指定的值-布尔索引
>>> 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.all() 全部符合条件才为true

# 判断前两名同学的成绩[0:2, :]是否全及格
>>> np.all(score[0:2, :] > 60)
False

np.any() 有一个符合条件就为true

# 判断前两名同学的成绩[0:2, :]是否有大于90分的
>>> np.any(score[0:2, :] > 80)
True

np.where 三元运算符

# 判断前四名学生,前四门课程中,成绩中大于60的置为1,否则为0
temp = score[:4, :4]
np.where(temp > 60, 1, 0)

复合逻辑需要结合np.logical_and和np.logical_or使用

 # 判断前四名学生,前四门课程中,成绩中大于60且小于90的换为1,否则为0
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)
# 判断前四名学生,前四门课程中,成绩中大于90或小于60的换为1,否则为0
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)

4.2 统计运算

在这里插入图片描述
进行统计的时候,axis 轴的取值并不一定,Numpy中不同的API轴的值都不一样,在这里,axis 0代表列, axis 1代表行去进行统计

# 接下来对于前四名学生,进行一些统计运算
# 指定列 去统计
temp = score[:4, 0:5]
print("前四名学生,各科成绩的最大分:{}".format(np.max(temp, axis=0)))
print("前四名学生,各科成绩的最小分:{}".format(np.min(temp, axis=0)))
print("前四名学生,各科成绩波动情况:{}".format(np.std(temp, axis=0)))
print("前四名学生,各科成绩的平均分:{}".format(np.mean(temp, axis=0)))

np.argmax(temp, axis=)
np.argmin(temp, axis=)
找出最大和最小元素的坐标

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

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

相关文章

网络安全(黑客)工具篇

大家好&#xff0c;我是白菜。这篇文章给大家盘点那些年&#xff0c;我们一起玩过的网络安全工具。 一、反恶意代码软件 1.Malwarebytes 这是一个检测和删除恶意的软件&#xff0c;包括蠕虫&#xff0c;木马&#xff0c;后门&#xff0c;流氓&#xff0c;拨号器&#xff0c;…

3D视觉算法工程师的工资,真是离谱!

小凡&#xff1a;「与其服务一个公司&#xff0c;不如服务一个行业」 一 我的从业经历 大家好&#xff0c;我是小凡&#xff0c;「3D视觉从入门到精通」知识星球的星主。 这里简单介绍下的我的从业经历。 本科主要是做机械出身&#xff0c;研究生入行3D视觉&#xff0c;这里…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[二]

文章目录 SSM--搭建Vue 前端工程--项目基础界面实现功能02-创建项目基础界面需求分析效果图思路分析 代码实现项目前后端分离情况项目前后端分离情况如图 注意事项和细节 SSM–搭建Vue 前端工程–项目基础界面 实现功能02-创建项目基础界面 需求分析 效果图 思路分析 使用V…

.Net6 Web Core API 配置 Autofac 封装 --- 依赖注入

目录 一、NuGet 包导入 二、Autofac 封装类 三、Autofac 使用 四、案例测试 下列封装 采取程序集注入方法, 单个依赖注入, 也适用, 可<依赖注入>的地方配置 一、NuGet 包导入 Autofac Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy 二、Auto…

【Linux】——信号量、线程池

目录 POSIX信号量 信号量的原理 信号量的概念 信号量函数接口 信号量与互斥锁 二元信号量 二元信号量模拟实现互斥功能 基于环形队列的生产消费模型 空间资源的数据资源 申请和释放资源 两个原则 Linux线程池 线程池的概念 线程池的应用场景 线程池的实现 线程…

【ASP.NET MVC】使用动软(二)(10)

一、添加动软生成工程 按前文添加动态到工程 双击动软 完成新建数据库服务器后 &#xff0c;需要关闭重新打开 选择简单三层&#xff0c;注意保存位置 注意切换数据库&#xff1a; 生成后拷贝五个文件夹到工程目录 注意目录结构&#xff1a; 添加四个项目到原来的工程&…

Python接口自动化之cookie、session应用

以下介绍cookie、session原理及在接口自动化中的应用。 HTTP 协议是一种无状态协议&#xff0c;即每次服务端接收到客户端的请求时&#xff0c;都是一个全新的请求&#xff0c;服务器并不知道客户端的历史请求记录&#xff1b;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的…

数学知识(二)

一、裴蜀定理 对于任意整数a,b&#xff0c;一定存在非零整数x,y&#xff0c;使得 ax by gcd(a,b) #include<iostream> #include<algorithm>using namespace std;int exgcd(int a,int b,int &x,int &y) {if(!b){x 1,y 0;return a;}int d exgcd(b,a %…

adb 调试oppo k11过程记录

学习使用appium工具&#xff0c;自动化测试andriod应用程序。 过程记录 背景交代 手机&#xff1a;oppo k11 系统&#xff1a; macOS 手机开启use调试 具体细节&#xff0c;可百度 安装软件 adbappiumappium-inspector adb安装 下载adb工具包platform-tools, 解压。 直…

SpringBoot3---核心特性---1、快速入门II

星光下的赶路人star的个人主页 要活出自己之后再被人理解 文章目录 1、核心技能1.1 常用注解1.1.1 组件注册1.1.2 条件注解1.1.3 属性绑定 1.2 YAML配置文件1.2.1 基本语法1.2.2 示例1.2.3 细节1.2.4 小技巧&#xff1a;lombok 1.3 日志配置1.3.1 简介1.3.2 日志格式1.3.3 记录…

Qt视频播放器

一、设置好ui界面二、打开文件槽函数1.QDir::homePath()作用介绍2.QFileDialog::getOpenFileName()介绍3.QFileInfo介绍4.player 指针解释5.打开文件槽函数完整代码 三、视频播放器初始化1.QMediaPlayer()函数2.设置时间间隔的作用3. QGraphicsScene介绍4.QGraphicsVideoItem介…

【bug】记录一次使用Swiper插件时loop属性和slidersPerView属性冲突问题

简言 最近在vue3使用swiper时&#xff0c;突然发现loop属性和slides-per-view属性同时存在启用时&#xff0c;loop生效&#xff0c;下一步只能生效一次的bug&#xff0c;上一步却是好的。非常滴奇怪。 解决过程 分析属性是否使用错误。 loop是循环模式&#xff0c;布尔型。 …

【广州华锐视点】葡萄种植VR虚拟仿真实训平台

随着虚拟现实(VR)技术的不断发展&#xff0c;越来越多的教育领域开始尝试将VR技术应用于教学中。在葡萄栽培这一专业领域&#xff0c;我们开发了一款创新的VR实训课件&#xff0c;旨在为学生提供沉浸式的互动学习体验。本篇文案将为您介绍葡萄种植VR虚拟仿真实训平台所提供的互…

【数据结构】“单链表”的练习题

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

集成学习算法是什么?如何理解集成学习?

什么是集成学习&#xff1f; 集成学习通过建立几个模型来解决单一预测问题。它的工作原理是生成多个分类器/模型&#xff0c;各自独立地学习和作出预测。这些预测最后结合成组合预测&#xff0c;因此优于任何一个单分类的做出预测。 机器学习的两个核心任务 任务一&#xff1…

C语言经典小游戏之三子棋(超详解释+源码)

“纵有疾风来&#xff0c;人生不言弃&#xff0c;风乍起&#xff0c;合当奋意向此生。” 今天我们一起来学习一下三子棋小游戏用C语言怎么写出来&#xff1f; 三子棋小游戏 1.游戏规则介绍2.游戏准备3.游戏的实现3.1生成菜单3.2游戏的具体实现3.2.1初始化棋盘3.2.2打印棋盘3.2…

【ChatGLM_02】LangChain知识库+Lora微调chatglm2-6b模型+提示词Prompt的使用原则

经验沉淀 1 知识库1.1 Langchain知识库的主要功能(1) 配置知识库(2) 文档数据测试(3) 知识库测试模式(4) 模型配置 2 微调2.1 微调模型的概念2.2 微调模型的方法和步骤(1) 基于ptuning v2 的微调(2) 基于lora的微调 3 提示词3.1 Prompts的定义及原则(1) Prompts是什么&#xf…

使用 RediSearch 在 Redis 中进行全文检索

原文链接&#xff1a; 使用 RediSearch 在 Redis 中进行全文检索 Redis 大家肯定都不陌生了&#xff0c;作为一种快速、高性能的键值存储数据库&#xff0c;广泛应用于缓存、队列、会话存储等方面。 然而&#xff0c;Redis 在原生状态下并不支持全文检索功能&#xff0c;这使…

服务注册中心consul的服务健康监控及告警

一、背景 consul既可以作为服务注册中心&#xff0c;也可以作为分布式配置中心。当它作为服务注册中心的时候&#xff0c;java微服务之间的调用&#xff0c;会定期查询服务的实例列表&#xff0c;并且实例的状态是健康可用。 如果发现被调用的服务&#xff0c;注册到consul的…

使用即时消息缩短 B2B 销售周期

在B2B销售中&#xff0c;时间就是一切。所以企业需要做的就是尽可能快地回复客户的咨询&#xff0c;否则会造成严重的客户流失。什么是 B2B 销售&#xff1f;它就是企业对企业销售&#xff0c;企业主要或仅向其他企业销售其产品或服务&#xff0c;这些产品或服务可以是从软件到…