机器学习 | 深入探索Numpy的高性能计算能力

news2024/10/5 20:19:49

目录

初识numpy

numpy基本操作

数组的基本操作

ndarray运算

数组间运算

矩阵


初识numpy

Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。

Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。它描述了相同类型的“item”的集合。ndarray 对象是在连续的内存块中分配的,因此访问和处理元素的速度比 Python 的原生列表更快,以下是ndarray与原生python在效率上的对比:

import random
import time
import numpy as np

a = []
for i in range(100000000):
    a.append(random.random())
# 通过%time魔法方法,查看当前行的代码运行一次所花费的时间
%time suml = sum(a)
b = np.array(a)
%time sum2 = np.sum(b)

机器学习最大的特点就是大量的数据运算,那么没有一个快速的解决方案的话,那可能现在的py也在机器学习领域达不到好的效果。 Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。

从下图我们可以看出:ndarray在存储数据的时候,数据与地址都是连续的,这样就使得批量操作数据元素时速度更快,而python原生list就只能通过寻址方式找到下一个元素。

以下是ndarray的常用属性介绍:

属性名字属性解释
ndarray.shape数组维度的元组
ndarray.ndim数组维度
ndarray.size数组中的元素数量
ndarray.itemsize一个数组元素的长度(字节)
ndarray.dtype数组元素的类型

以下根据表格的情况,进行下面的测试来验证常用属性的使用

numpy基本操作

以下解释使用numpy的一些基本操作:

生成0,1数组:我们也可以通过numpy生成特殊的0,1数组操作:

生成现有数组:通过下面的方式将现有的数组生成ndarray形式:

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

array和asarray的不同在于,array是深拷贝而asarray是浅拷贝,如下:

生成固定范围数组:通过numpy的函数生成一个固定范围的数组

生成随机数组:生成随机数组采用正态分布的方式进行,生成正态分布的方式有以下三种:

# 返回一组均匀分布的数
np.random.randn(d0, d1,..., dn)

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

# 一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
# low:采样下界; high:采样上界; size:输出样本数目 返回值:ndarray类型
np.random.uniform(low=0.0,high=1.0,size=None)

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

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

在正态分布当中,我们采用如下的例子:

在均匀分布当中,我们采用如下的例子:

我们也可以模拟一组均值为0,方差为1的在某个正态分布内的数据:

数组的基本操作

当我们使用numpy生成ndarray数组后,如何对数组进行相应的操作呢?如下开始讲解:

数组的索引切片:直接对某维数组进行索引和切片,然后返回我们想要的数据:

形状修改: 修改数组的形状可以采用如下的三种方式:

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

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

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

类型修改:通过如下的方式修改数组的类型

数组去重:如果想数组去重的话可以采用如下的方式进行

ndarray运算

通过ndarray运算,我们可以筛选符合某一条件的数据,以下是使用的一些常用方法:

逻辑运算:逻辑运算可以采用如下的方式进行筛选数组

将大于60的值赋值为1:

通用判断函数:通用判断函数可以采用如下的方式进行筛选数组

三目运算符:三目运算符可以采用如下的方式进行筛选数组

统计运算:统计运算可以采用如下的方式进行筛选数组

数组间运算

我们也可以通过numpy实现数组与数、数组与数组以及数组间运算的广播机制等操作。

数组与数运算:可以看如下操作

数组与数组运算:数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。下面通过一个例子进行说明:

广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可。

1)数组的某一维度等长。

2)其中一个数组的某一维度为1。

矩阵

在numpy中进行矩阵相乘的api是:

np.matmul、np.dot

np.matmul和np.dot的区别:

二者都是矩阵乘法。np.matmul中禁止矩阵与标量的乘法。在矢量乘矢量的内积运算中,np.matmul与np.dot没有区别。

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

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

相关文章

万字干货教你如何保证业务数据全流程安全

云布道师 引言:本文内容整理自【弹性计算技术公开课——ECS 安全季】中阿里云弹性计算技术专家陈怀可带来的课程《如何保证业务数据的全流程安全》。 数据安全的基本概念 首先,来看一下数据安全的基本概念。 用户的云上数据安全是用户的生命线&#x…

HarmonyOS 鸿蒙应用开发( 六、实现自定义弹窗CustomDialog)

自定义弹窗(CustomDialog)可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。 在应用的使用和开发中,弹窗是一个很常见的场景,自定义弹窗…

PyTorch 添加 C++ 拓展

参考内容:pytorch添加C拓展简单实战编写及基本功能测试 文章目录 第一步:编写 C 模块test.htest.cpp 第二步:编写 setup.py第三步:安装 C 模块第四步:验证安装第五步:C 模块使用test_cpp1.pytest_cpp2.py 运…

如何使用preact开始一个前端项目?

本篇文章对于preact不做过深介绍,仅仅介绍其基础的使用方法。使用Preact,我们可以通过组装组件和元素的树来创建用户界面。组件是返回其树应该输出的内容的描述的函数或类。这些描述通常是用JSX(如下所示)或HTML编写的&#xff0c…

CSS之粘性定位

让我为大家介绍一下粘性定位吧&#xff01; 大家应该都了解过绝对定位&#xff0c;它是相对于父级定位 那么粘性定位相对于谁呢&#xff1f; 它相对于overflow:hidden; 如果没找到就会跟fixed固定定位一样&#xff0c;相对于视口 <!DOCTYPE html> <html lang"en…

地图在游戏中的应用案例:王者荣耀

腾讯位置服务&#xff0c;作为国内地图导航的领头羊&#xff0c;在各行业中应用广泛&#xff0c;包括&#xff1a;网约车、智能物流、车用地图、智能穿戴、智能景区、运输安全监控、金融地图、运动健康、房产服务、智慧交通、时空大数据慧眼、专网地图等等。 腾讯地图与其他竞…

视频监控方案设计:EasyCVR视频智能监管系统方案技术特点与应用

随着科技的发展&#xff0c;视频监控平台在各个领域的应用越来越广泛。然而&#xff0c;当前的视频监控平台仍存在一些问题&#xff0c;如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果&#xff0c;也制约了视频监控平台的发展。 为了解决这些问…

分享几种常见的OCR图形识别API接口

VIN识别 支持对车辆挡风玻璃处和行驶证车架号码进行识别。 银行卡识别 识别出该卡的银行卡号、所属银行、卡片类型以及银行邮编等信息。 通用文字识别 自动提取及快速识别出图像中文字内容&#xff0c;适用于多场景图像文字识别。 身份证识别 识别及提取身份证正反面所有字段…

EG-2102CB 表面声波(SAW)振荡器

表面声波&#xff08;SAW&#xff09;振蒎器&#xff0c;简称声表晶振&#xff0c;其频率范围非常广泛&#xff0c;可实现从100MHz到700MHz的精度频率输出。其标准工作电源电压为3.3V&#xff0c;具有高稳定性。输出特性稳定&#xff0c;具有低抖动、高精度、高线性等优点。其输…

ChatGPT 和文心一言 | 两大AI助手哪个更胜一筹

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff…

您有一份OpenHarmony开发者论坛2023年度总结,请查收~

2023年11月&#xff0c;OpenHarmony开发者论坛1.0版本正式上线。感谢各位开发者对OpenHarmony的大力支持和热爱&#xff0c;成为OpenHarmony开发者论坛的第一批体验用户&#xff0c;并迅速在论坛开启了OpenHarmony技术交流。 通过开发者们在论坛进行提问、答疑、分享技术文章、…

Flask 之旅 (二):表单

背景 上一篇帖子我们使用 Flask 创建了最基本的 web 服务。使用 bootstrap 对页面进行装点&#xff0c;使用 JQuery Ajax 实现了在页面上实时显示 log 的功能。趁着周末&#xff0c;我继续开始学习更多的东西以满足这个 web 服务的需求。 模板继承 之前我们有了首页&#xf…

如何使用Docker安装Spug并实现远程访问本地运维管理界面

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

算法基础学习|离散化与区间合并

位运算 代码模板 求n的第k位数字: n >> k & 1 返回n的最后一位1&#xff1a;lowbit(n) n & -n 题目&#xff1a;二进制中1的个数 题目 给定一个长度为 的数列&#xff0c;请你求出数列中每个数的二进制表示中 1 的个数。 输入格式 第一行包含整数 。 第…

kubeSphere DevOps自定义容器 指定nodejs版本

✨✨✨✨✨✨ &#x1f380;前言&#x1f381;基于内置镜像构建&#x1f381;把镜像添加基础容器中&#x1f381;检查容器是否配置成功&#x1f381;不生效的原因排查&#x1f381;按步骤执行如下命令 &#x1f380;前言 由于我本地的开发环境node是16.18.1,而自带容器node的版…

体验华为云对话机器人服务 CBS

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、开通…

【虚拟化 VS 容器化】

目录 1. 虚拟化1.1什么是虚拟化&#xff1f;1.2虚拟化的特点1.3虚拟化主流技术1.4虚拟化的应用场景 2. 容器化2.1什么是容器化&#xff1f;2.2容器化的特点2.3容器化主流技术2.4容器化的应用场景 3. 虚拟化VS容器化3.1图解区别3.2架构区别3.3表式区别 4. 虚拟化的发展趋势参考链…

MSTP协议

目录 MSTP 基本原则 MSTP术语 BPDU变化 三种生成树的比较 MSTP MSTP&#xff08;802.1s&#xff09;多生成树。 多生成树(MSTP)解决&#xff1a; &#xff08;1&#xff09;去掉环 &#xff08;2&#xff09;负载均衡&#xff08;重点&#xff09; &#xff08;3&#xf…

本地Vscode使用SSH连接Linux虚拟机循环输入密码,无法登陆

今天在工作的时候没有在本地关闭Vscode的前提下&#xff0c;重启了虚拟机后&#xff0c;发现ssh连接不上了&#xff0c;症状就是反复输入密码就是进不去系统&#xff0c;查了很多网上的教程都没啥用&#xff1b; 最后就一招彻底解决问题&#xff1a; 第一步&#xff1a;打开虚…

发生内存泄漏后

内存泄漏是指程序在运行过程中分配的内存无法被释放&#xff0c;导致内存使用量不断增加&#xff0c;最终可能导致程序崩溃或系统崩溃。 产生内存泄漏的原因 内存泄漏可能是由多种原因造成的&#xff0c;例如&#xff1a; 忘记释放内存。由于项目比较大&#xff0c;一般申请内…