机器学习之计算工具库Numpy

Python 工具库每日推荐 【NumPy】 NumPy 作为 Python 科学计算的基础库,为数据分析、机器学习、信号处理等领域提供了强大的工具。它的高性能数组操作和丰富的数学函数使得复杂的数值计算变得简单高效。通过本文的介绍和示例,我们看到了 NumPy 在创建和操作数组、执行数学运算、处理图像等方面的强大功能。在实际应用中,NumPy 常常与其他科学计算库如 Pandas(用于数据分析)、Matplotlib(用于数据可视化)、SciPy(用于高级科学计算)等结合使用,形成一个完整的数据科学工作流程。 阅读详情

标题

  1. Numpy

    1. ndarray

    2. ndarray数据类型

    3. 修改ndarray的形状

    4. ndarray索引和切片

    5. ndarray的转置与轴变换

    6. 通用函数

    7. ndarray与标量的运算

Numpy

NumPy是用Python进行科学计算的基本软件包。它包含以下内容:

  • 一个强大的N维数组对象

  • 复杂的(广播)功能

  • 用于集成C / C ++和Fortran代码的工具

  • 有用的线性代数,傅里叶变换和随机数能力

  • 用于读写磁盘数据以及操作内存映射文件的工具


 NumPy的优势在于NumPy底层使用C语言编写,其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。并且结合Python脚本语言的特点,使得代码比起其他语言更简洁易读。除了明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。任意的数据类型可以被定义。这使得NumPy能够与各种各样的数据库无缝,快速地整合。


ndarray

ndarray是一个N维齐次同构数组对象,每个数组都有一个shape和dtype属性,shape描述的是ndarray的形状,而dtype则描述ndarray里面元素的数据类型。


创建ndarray

通常创建ndarray会用如下几种方法

函数

说明

array

将输入数据(列表、元祖、数组或其他序列类型)转换为ndarray。要么有numpy自己推断dtype,要么显示的指定dtype。默认直接复制输入数据

asarray

将输入转换为ndarray,如果输入本身就是一个ndarray则不进行复制。

arange

类似内置的range,但返回的是ndarray数组而不是列表

ones

ones_like

根据指定的形状和dtype创建一个全1的数组。ones_like接受另一个数组为参数,并根据其形状和type创建全1数组

zero

zero_like

类似one和ones_like,但产生数组的值全为0

empty

empty_like

和上面类似,不过只分配律内存空间,数组里的值不作初始化

eye

identity

创建一个N x N的单位矩阵

下面是创建ndarray的例子

可以看到numpy根据输入的嵌套列表,生成了一个二维数组,每一维有三个元素,而且我们可以看到该数组元素的数据类型均为int64(因为没有显式的指定dtype参数,所以numpy自己推断了int64这个数据类型,int64为64位整型)


ndarray数据类型

dtype含有将ndarray解释为特定数据类型的所需的信息,数据的类型命名有规律,均为类型名+位宽(一个字节有8个位宽)如上面例子中的int64。dytpe有整型、浮点数、字符串、复数、布尔值、Python对象等等。


如果你没有在创建ndarray数组时显式的指明dtype,你仍可以通过astype(type)方法修改数据类型为type,但是使用astype会返回一个新的数组,浪费额外的内存,因此建议在创建ndarray数组的时候指定数据对象。(注意浮点数转化为整型数会把小数部分截断)


修改ndarray的形状

shape属性描述了ndarray数组的形状ndarray.shape会返回描述形状而元祖,元祖内元素的个数表示数组有多少个维度,元素的值描述了某个维度的长度。在创建ndarray数组的时候我们可以用一个元祖指定shape参数的取值来控制数组的形状。或者在创建数组之后,直接对数组的shape属性赋值或者使用reshape()方法来返回一个指定形状的新数组。


在使用reshape的时候若你指定传入-1为参数,那么返回的数组将会是1维,

当你指定了n-1维的值后,剩下一维的大小可以传入-1,由numpy自己计算出该维度的大小


reshape()方法虽然可以改变数组的形状,但由于数组元素的个数是恒定不变的,而且显然数组元素个数为各个维度大小的乘积。但在有些时候,我们需要给数组添加一些新的元素。numpy中有column_stack()和row_stack()方法,可以把两个数组合并,达到增加元素的效果。

以column_stack()为例,该函数接受一个元祖作为参数将元祖内的数组按列堆叠,上例将形状为(2,1)的数组堆叠到array,显然按列堆叠必须要行数必须相等。大于二维的数组若想要成功按列堆叠,则需要除列以外所有维度的大小相等。


类似的函数或类还有concatenate()、vstack()、r_、c_等等,其中concatenate()为最一般的连接方法,它可以指定按某一个轴进行数组的合并。


除了合并,还可以用split()函数传入指定轴以及切分点的索引值拆分数组(传入n个切分索引则返回n+1个数组),类似的方法还有hsplit() 、vsplit() 、dsplit()有兴趣的朋友可以去查看官方文档。


ndarray索引和切片

Python列表的索引和切片操作在ndarray上仍然适用。但是要注意ndarray的切片返回的是数组的视图而非副本,如果你想要获得副本,这需要显式的调用copy()方法

以上代码可以选取除最后一列的其他元素,可以看到在numpy里,所有维度的索引可以写在一个中括号内,并且用逗号隔开(分别写在多个中括号也是可以的,这种写法和Python列表索引的写法相同)。


ndarray还有着特殊的索引方式,分布是布尔型索引和花式索引。


布尔型索引就是在中括号内放入布尔型数组,数组会根据布尔型数组的真值来选择数据。

上例中在索引里加入布尔表达式,可以生成与原数组形状相同的布尔型数组,如上图所示array>3返回的是是一个与原数组形状相同的布尔型数组。原数组对应位置的元素的值为该元素对于给定布尔表达式的真值。因此只有4,5,6对应的位置应位置的取值才为True。若把布尔型数组放入索引,就可以按照布尔数组来索引元素了。(注意布尔型数组的长度必须与被索引轴的长度相等)


花式索引就是把一个指定顺序的整数顺序的列表或者ndarray数组放入中括号内,就可以按照特定顺序选取子集例如我想选第0列和第2列的全部元素,那么就可以向下面那样进行索引。

或者我想先选取第2列再选取第0列,只须修改列表里元素的顺序即可。


numpy索引的方法有很多,但是各种索引方式之间的效率和空间是不一样的。例如我们现在有一个比较大的数组,我们打算每隔10个行选取1行,则可以有以下两种方式。

可以看到使用切片会比花式数组快两个数量级,这是因为切片返回的是原数组的视图,修改视图会修改原数组。但是花式索引返回的是却是一个新的数组。实际上使用切片再显式的拷贝也比使用花式数组要快。故等步长选取数据时优先使用切片会有更好的性能。


但你选取的数据不是按等步长的选择时,可以使用np.take()方法,他接受一个数组,索引数组以及轴作为参数,如下例所示

使用take()方法可以比使用花式索引快那么一点点。在使用布尔型索引按某一轴的时候,使用np.compress()的效率会更高。(np.compress()用法和take一样)。


ndarray的转置与轴变换

若想实现数组的转置可以使用transpose()方法接受描述轴顺序的元祖作为参数,并根据这一元祖对元素重新排序。例如一个二维数组的轴原来为(0,1),当你改变轴的顺序为

(1,0)即可实现转置。

也可以直接使用.T简单转置

在处理二维数组的时候使用.T和.transpose()并没有差异,但是.transpose()可以实现更复杂的轴变换,而.T值能实现轴的按逆序来进行轴变换。(注意一维数组的转置为本身)


通用函数

通用函数是一种对ndarray中的数据进行元素级运算的函数。这些函数非常好上手,都是一些看到名字就知道作用的函数,例如abs、fbs、sqrt

、exp等等。numpy的数学函数库非常的丰富,在此就不一一说明,以下是例子。

可以看到每一个元素都被开平方。


ndarray与标量之间运算

ndarray支持数组直接用运算符来与标量运算。运算的效果为数组的每一个元素都与标量进行运算,这一点符合和我们正常的使用习惯。并且对于形状相同的两个数组,使用运算符直接运算,会转化为对应位置元素之间的运算,一下是例子。

可以看到原数组的每一个元素的值都加1了。


ndarray的“三目运算符”

在numpy中有一个where函数,常用于对特定数据进行修改或者选取。其用法有点像C语言中的三目运算符。

where()函数接受三个参数,第一个是逻辑表达式,若逻辑表达式为真则选取第二个参数,否则选取第三个参数。第二个和第三个参数可以是标量也可以是数组。本质上就是一个if...else...语句快。


如上例所示,但arr1与arr2对应位置的元素进行比较,若arr1中对应位置的元素大于arr2对应位置的元素,则选取arr1中的元素,否则选取arr2中的元素。故结果为 array( [ 3,2,3] )。


本期为大家简单介绍了numpy的部分内容,下期Python基础将会更深入地为大家介绍numpy的使用方法。

python菜鸟教程python机器学习工具库 正是由于Python简单易用以及高开发效率,吸引了大量的开发者为其创建更多新的机器学习工具库;而又因为大量的机器学习工具库的出现,使得Python在机器学习领域变得如此流行。 下面我们就来探索一下机器学习领域中最受欢迎的十大框架或工具库: Tensorflow 如果你正在使用Python来从事机器学习项目,那么你一定听说过其中一个著名的框架——Tensorflow。Tensorflow框架主要由G... 阅读详情

相关推荐

159、NumPy实战案例:数据处理、科学计算与机器学习

本文介绍了NumPy在实际项目中的应用,包括数据处理、科学计算和机器学习。通过案例展示,我们了解到NumPy在股市数据分析、气象数据分析、物理公式计算、线性方程组求解、数值积分和数值微分等领域的应用。同时,文章还提到了NumPy在图像处理、数据可视化以及时间序列分析等方面的实用技巧。通过这些案例和技巧,我们希望帮助读者更好地理解和掌握NumPy这个强大的工具,并在实际项目中运用它。

silenceallat的博客 1205

numpy --- 数组的数据类型

一、数据类型 数据类型,即dytpe,是一个特殊的对象,它包含了ndarray需要为某一种类型数据所申明的内存块信息。 二、numpy中的数据类型 三、一些示例 引入numpy import numpy as np - 将整数类型转换为浮点数类型 定义一个整数类型数组 arr1= np.array([1,2,3,4,5,6]) print("-------------------") print(arr1) print(arr1.dtype) 转换为浮点数类型 arr2= arr1.astype(np

qq_43709590的博客 4785

Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。Python 机器学习是利用 Python 编程语言中的各种工具和库来实现机器学习算法和技术的过程。

仙魁XAN 1340

ndarray的数据类型

dytpe是numpy的数据类型。 数据中的dytpe都是按照类型名,比如:float和int,来命名的,后面再加一个表明每个元素位数的数字。 我们常见的float64,就是指64个字节。(或64位小数)。 arr1 =np.array([1,2,3],dtype=np.float64) arr1.dtype dtype('float64') arr2 =np.array([1,2,3],dtype=np.int32) arr2.dtype dtype('int32') 不仅仅可以规定数组类型,而且还可以

xiaoyun5555的博客 1659

numpy-ml:深度解析基于numpy的轻量级机器学习库

numpy(Numerical Python)是一个开放源码的Python库,专注于提供高性能的多维数组对象及处理这些数组的工具。它封装了许多高级数学函数,能够在数组上进行高效的向量化运算,从而简化了复杂的数据分析任务。在数据科学与机器学习领域,对于算法的效率和易用性有着极高的要求。numpy-ml库应运而生,旨在为机器学习算法的实现提供一种高效且易于使用的途径。其背后的核心理念是利用numpy所提供的强大数组操作能力,为常见的机器学习算法提供简洁、高效的实现方式。

weixin_30356433的博客 1148

HCIA重点知识

华为认证ICT工程师,是华为认证体系中用于标识个人能力在某一技术领域达到工程师级别的证明,表示通过认证的人员具备安装、配置、运行 ICT 设备,并进行基础故障排除的能力。抽象语言 -----> 编码 -----> 二进制 -----> 电信号 -----> 处理电信号信号的转换标准:协议,是一种允许电子设备相互交流的一系列标准的规则。即开放系统参考模型OSI/RM,简称“OSI”。OSI参考模型将计算机网络分为七个层次,自上而下依次为:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。1、应用层:

Awen0201的博客 2536

【Python三方库】Python之NumPy库的简介、安装、使用方法、示例代码、注意事项等详细攻略

Python之NumPy库的简介、安装、使用方法、示例代码、注意事项等详细攻略

科技改变人类,技术成就未来 2948

InfiniBand(IB)实战指南:从硬件配置到性能优化

本文是一份详尽的InfiniBand实战指南,涵盖从硬件选型、部署到驱动配置、性能优化的全流程。重点解析了InfiniBand作为AI训练与高性能计算(HPC)核心网络的优势,特别是其支持的RDMA技术如何实现微秒级低延迟。文章提供了硬件匹配、NCCL压测、内核参数调优及在PyTorch分布式训练中启用IB的实操步骤,旨在帮助工程师构建和优化高性能计算集群。

mqtt6iot的博客 578

探索Python的强大工具 - NumPy库,小白也能看懂的python入门!

大家好,今天我想与大家分享一下Python编程中一个不可或缺的工具,它就是NumPy库。无论你是数据科学家、工程师还是编程爱好者,NumPy库都是你不容错过的工具。

Python966的博客 266

香橙派5上跑DeepSeek-R1的避坑指南:从模型下载到NPU加速全流程解析

本文详细解析了在香橙派5(RK3588)上部署DeepSeek-R1蒸馏模型的完整流程与优化技巧。内容涵盖从系统配置、RKLLM工具链编译、模型转换到NPU加速调优的全过程,重点分享了如何利用RK3588的NPU算力实现高效推理,并提供了常见问题的解决方案,为边缘设备部署LLM提供了实用指南。

CAT789的专栏 715

AT32F403A ADC通道管理与转换模式实战解析

本文深入解析AT32F403A微控制器的ADC模块,重点阐述其通道管理机制与四种转换模式(序列模式、抢占自动转换模式、反复模式、分割模式)的实战应用。通过详细的配置步骤与代码示例,帮助开发者高效实现模拟数字转换,优化数据采集性能与系统响应。

sky77的博客 278

NumPy 科学计算工具库入门

本文主要介绍了 Python 的 2D 绘图库 Matplotlib。它能生成出版质量级别的图形,提供类似 MATLAB 的界面,可结合 IPython 使用。对于高级用户可完全控制图形属性。文章介绍了安装方法、辅助工具包、官方文档地址、两种代码写法及子模块使用方法,并对其核心模块进行了说明。

编程是一门实践技术 1561

YOLOv8的特征蒸馏代码应用讲解(CWD/MGD/mimic/在线蒸馏/逻辑蒸馏)

基于YOLOv8的逻辑蒸馏、特征蒸馏、在线蒸馏等方法代码介绍。

qq_41920323的博客 2582

图解数据分析(8) | Numpy - 统计与数据科学计算工具库介绍(数据科学家入门·完结)

n维数组是NumPy的核心概念,大部分数据的操作都是基于n维数组完成的。本系列内容覆盖到1维数组操作、2维数组操作、3维数组操作方法,本篇为系列导入文章,讲解数组的特点、与列表的对比等。......

ShowMeAI研究中心 1万+

C#上位机开发:西门子/三菱PLC通信,新手直接上手

对着西门子S7协议文档看半天,连“DB块地址怎么写”都搞不懂;写三菱PLC代码时,分不清MC协议和Modbus的区别,代码改来改去连不上;好不容易跑通代码,换个PLC型号又报错,不知道哪里出问题;后来发现,新手学PLC通信根本不用先啃协议文档——先跑通“能通信”的代码,再慢慢理解底层逻辑,效率至少提升3倍。西门子PLC:用S7NetPlus库(新手最友好),实现以太网通信,支持S7-200 SMART/1200/1500;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 877

Unity Hololens2开发|(一)环境配置

开发过程中预览和调试应用:可以在电脑上的 Unity 编辑器中以播放模式本地运行应用,并将体验流式传输到 HoloLens2。将来自 HoloLens2 的输入(视线、手势、语音和空间映射)发送到电脑,在其中内容以虚拟沉浸式视图渲染。在HoloLens2设备中,打开Settings面板,依次选择Update & Security > For Developers,打开“Developer Mode”。在开发计算机中打开控制面板,依次选择“更新和安全> 开发者选项”,打开“开发人员模式”;

游戏开发小Y的博客 14万+

joblib:Python 并行计算与缓存的工具库

Joblib 是一个专注于 Python 并行计算和结果缓存的轻量级工具库,简化了多进程/多线程任务的实现过程。其核心功能包括:1. 通过 Memory 类实现磁盘缓存,可自动存储函数计算结果,避免重复计算;2. 提供 Parallel/delayed 组合实现简洁的并行任务调度,支持自动分配CPU核心。该库在科学计算领域应用广泛,是scikit-learn的底层依赖,特别适合机器学习预处理、批量文件处理等场景。安装简单(pip install joblib),与NumPy、SciPy等科学计算栈兼容性好,

debugmymind866的博客 593

「Python科学计算入门:从NumPy到Matplotlib,一文掌握核心工具库」

Python 之所以成为数据科学和科学计算的首选语言,是因为它拥有强大且丰富的库,能够帮助我们轻松进行。Seaborn 是基于 Matplotlib 的高级可视化库,绘图更加。NumPy(Numerical Python)是 Python 进行。数据分析报告、统计建模、机器学习数据探索等。,掌握这些工具库都能让你的数据处理更加高效!科学计算、机器学习、工程计算、数据分析等。数据分析、商业智能、机器学习预处理等。数据报告、科研论文、商业分析等。机器学习、工程计算、信号处理等。,并通过简单示例帮助你快速入门。

Cha3043445754的博客 1199

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

numpy-ml 全解析:基于 NumPy 从零实现机器学习算法的教学级代码库

numpy-ml 是一个用纯 NumPy(仅辅以少量 SciPy)从零实现常见机器学习算法的开源教学代码库,涵盖概率图模型、深度神经网络、树模型、线性模型、强化学习、非参数方法、矩阵分解与预处理工具等十余大类算法。阅读本文后,你将掌握该仓库的安装方式、十二大算法模块的组织结构与源码映射关系,并能以它为起点快速开展实验、教学与二次开发。 ## 项目定位:为什么要用 NumPy 重写一遍机器学习

gitblog_00757的博客 1203

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

机器学习最大的特点就是大量的数据运算,那么没有一个快速的解决方案的话,那可能现在的py也在机器学习领域达不到好的效果。Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。:数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。:通过numpy的函数生成一个固定范围的数组。

ztK63LrD的博客 2232

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

numpy-ml 数据工具库解析:BallTree、DiscreteSampler、PriorityQueue 与 Dict 的源码级指南

本指南聚焦 numpy-ml 仓库中 `numpy_ml/utils/data_structures.py` 实现的四类核心数据结构:用于高维最近邻搜索的 BallTree、基于别名方法(alias method)的 O(1) 离散采样器 DiscreteSampler、基于二叉堆的定长优先队列 PriorityQueue(及其节点 PQNode),以及带自动编码功能的字典子类 Dict。读完本文

gitblog_00985的博客 772

用 NumPy 从零手写机器学习算法:ML-From-Scratch 完整指南

自己实现一个神经网络时,你大概率遇到过这种情况:反向传播的梯度算出来不对,翻来覆去看了三遍,分不清是矩阵转置的方向写反了,还是链式法则拆错了。框架把求导过程藏进了 `backward()` 里,你只能猜。ML-From-Scratch 就是为这个场景准备的——它把 34 个经典机器学习算法全部用裸 NumPy 从零实现了一遍,没有框架、没有自动微分,从线性回归一路写到手写卷积神经网络,每一行都能直

gitblog_00553的博客 959

numpy-ml 开源项目教程

`numpy-ml` 是一个不断增长的机器学习模型、算法和工具集合,完全使用 NumPy 和 Python 标准库编写。该项目旨在为常见的机器学习组件提供参考实现,以便于快速原型设计和实验。 ## 项目快速启动 ### 克隆项目并设置环境 首先,克隆 `numpy-ml` 仓库并设置虚拟环境: ```bash git clone https://github.com/ddbourgin/n...

gitblog_00867的博客 594

numpy-ml RL 工具库实战指南:基于 rl_utils 实现 gym 环境分析与连续状态 Tile Coding

`numpy_ml.rl_models.rl_utils` 是 numpy-ml 强化学习模块的底层工具库,负责为 Monte Carlo、时序差分(SARSA/Q-learning)、Dyna-Q 等智能体提供统一的环境能力探测、空间统计、表格型环境模型(EnvModel)与连续观测的 Tile Coding 编码。阅读本文后,你将掌握 `env_stats` 系列函数如何描述任意 OpenAI

gitblog_00270的博客 601
上一篇: 机器学习中的数据预处理(sklearn preprocessing)
下一篇: 测试代码的执行时间:%time和%timeit
imJaron
博客等级 码龄11年 121粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值