机器学习库【03】:-NumPy-算术运算

一、说明

        与常规数学一样,数组算术本质上是关于加法、减法、乘法和除法。在 中NumPy,此类操作是按元素执行的 [2]:

        NumPy 是 Numerical Python 的缩写,是 Python 生态系统中一个功能强大的库,它提供对大型多维数组和矩阵的支持,以及对这些数组进行操作的数学函数集合。NumPy 的关键优势之一在于其高效处理数组算术运算。在这篇博文中,我们将使用 NumPy 深入研究数组算术的世界,探索基本操作、广播和有用的函数。

二、第 1 部分 - 了解 NumPy 数组:

        在深入研究数组算术之前,我们先简要了解一下 NumPy 数组的基础知识。NumPy 数组是同质的,可以是任何维度。无论是一维数组(向量)、二维数组(矩阵)还是高维数组,NumPy 都提供了一致的接口来执行算术运算。

2.1  逐元素运算

        逐元素操作将给定操作独立地应用于数组中的每个元素。您还可以对数组执行加法、减法、甚至乘法和除法 [3]。

2.2  加法

        如本例所示,NumPy将每个数组的第一个元素相加,将每个数组的第二个元素相加,并将每个数组的第三个元素相加。因此,按元素相加。同样可以推断到多维数组。考虑以下示例 [2]:

        让我们创建两个 NumPy 数组来展示它们的实用性。我们会打电话data给他们ones

按位置添加它们(即添加每行的值)就像键入以下内容一样简单data + ones

data=np.array([1,2])
ones= np.ones(2)
addition = data + ones
print(f'Addition of data and ones:\n{addition}\n')

  +-*/如果两个矩阵大小相同,我们可以使用算术运算符 ( ) 对矩阵进行加法和乘法。NumPy 将这些处理为位置操作:

        逻辑是相同的:每个数组中左上角的元素相加,每个数组右上角的元素相加,依此类推。减法、除法、乘法、指数、对数、根和许多其他代数运算(或算术,取决于你问的是谁)都将以相同的方式执行 [2]。

data=np.array([[1,2],[2,4]])
ones= np.ones(2)
addition = data + ones
print(f'Addition of data and ones:\n{addition}\n')

        仅当不同维度为一(例如,矩阵只有一列或一行)时,我们才可以对不同大小的矩阵进行这些算术运算,在这种情况下,NumPy 使用其广播规则进行该运算 [1]。

2.3 减法、乘法和除法

data=np.array([[1,2]])
ones= np.ones(1)
subtraction = data - ones
print(f'Subtraction of data and ones:\n{subtraction}\n')
data=np.array([[1,2]])
multiplication = data * data
print(f'Subtraction of data and ones:\n{subtraction}\n')
print(f'Multiplication of data and data:\n{multiplication}\n')
data=np.array([[1,2]])
true_division = data / data
print(f'True divition of data and data:\n{true_division}\n')
a = np.arange(1, 10).reshape((3,3))
b = np.arange(10,19).reshape((3,3))
subtraction = a - b
multiplication = a * b
true_division = a / b
floor_division = a // b
remainder = np.remainder(a, b)
print(f'Array a:\n{a}\n')
print(f'Array b:\n{b}\n')
print(f'Subtraction of a and b:\n{subtraction}\n')
print(f'Multiplication of a and b:\n{multiplication}\n')
print(f'True divition of a and b:\n{true_division}\n')
print(f'Floor division of a and b:\n{floor_division}\n')
print(f'Remainder of a and b:\n{remainder}')

2.4  点积

        算术的一个关键区别是使用点积的矩阵乘法的情况。NumPy 为每个矩阵提供了一种dot()与其他矩阵进行点积运算的方法 [1]:点积是一种数学运算,用于计算两个向量的相应元素的乘积之和。在 NumPy 中,您可以使用该dot()函数计算点积。

        我在该图的底部添加了矩阵尺寸,以强调两个矩阵在彼此面对的一侧必须具有相同的尺寸。您可以将此操作想象为如下所示 [1]:

import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
dot_product = np.dot(a, b)
print(dot_product)
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
dot_product = np.dot(a, b)
print(dot_product)

使用该功能时需要注意以下几点dot()

  • 两个数组必须具有相同的内部维度才能定义点积。
  • dot()函数不可交换,这意味着np.dot(a, b)与 不同np.dot(b, a)
  • dot()函数可用于计算两个复向量的内积。在这种情况下,将使用第二个向量的复共轭。

2.5  广播:

        NumPy 的广播功能可以在不同形状和大小的数组之间进行操作。广播会自动扩展较小的数组以匹配较大数组的形状,从而促进按元素操作。NumPy 允许在不同形状和大小的数组之间进行操作,这称为广播。广播会自动调整较小数组的形状以匹配较大数组,使其与逐元素操作兼容 [3]。

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
scalar = 2
result_broadcast = arr * scalar
print("Broadcasting Result:", result_broadcast)

在此示例中,标量值被广播到数组的每个元素,从而简化了代码并增强了可读性。

# Creating 1D NumPy arrays
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
scalar = 2
# Actual Matrix Multiplication using np.dot
matrix_multiplication = np.dot(matrix1,matrix2)

三、结论 

        在这篇博文中,我们探索了使用 NumPy 进行数组算术运算的基础知识。无论您是执行简单的按元素运算,还是利用广播和 ufunc 来执行更复杂的任务,NumPy 都为 Python 中的数值计算提供了强大的框架。理解和掌握这些数组算术概念将使您能够有效地操作大型数据集并轻松执行复杂的数学运算。

        NumPy 的文档是探索其他功能和特性的宝贵资源,使您能够在数据科学和机器学习工作中释放数组算术的全部潜力。 

请记住,学习是一个持续的过程。因此,继续学习,继续创造并与他人分享! 

注意:如果您是机器学习输出者,并且有一些好的建议来改进此博客以供分享,请撰写评论并做出贡献。

如果您需要有关机器学习的更多更新并希望做出贡献,请关注并注册以下内容

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive集群出现报错信息解决办法

一、报错信息:hive> show databases;FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 解决办法:1.删除mysql中的元数据库(metastore&#xff0…

C#编程-使用变量

使用变量 请考虑以下场景:您必须创建一个程序,接受来自用户的两个数字并在屏幕上显示着两个数字之和。现在,读取用户提供的数字时,您需要将这些数字存储在内存中的某个位置,以便您能对这些数字执行加操作。您可以使用变量将这些数字存储在内存中。 下图显示了使用变量将…

数据治理:释放数据价值的关键

随着数字化时代的到来,数据已成为组织和企业最重要的资产之一。然而,数据的快速增长和复杂性也给数据管理带来了巨大的挑战。为了确保数据的质量、安全性和合规性,数据治理已成为组织和企业必须面对的重要问题。数据治理是数据要素市场建设的…

MySQL数据库导入100万数据不同方式的性能差异

本文将介绍MySQL数据库导入100万数据的三种方式性能比较。 三种方式分别为: (1)逐条INSERT (2)批量INSERT提交 (3)通过mysql自带的load data命令 应用场景:假设需要向100万个号码…

【MySQL】事务Transaction

1. 事务的概念 事务是什么 在业务逻辑中使用sql,面对一些较复杂的场景,是需要多个sql语句组合起来实现的。如:银行的转账业务,若客户A要转账100元给客户B,就要两条sql:A余额减100,B余额加100&a…

手拉手Springboot获取yml配置文件信息

环境介绍 技术栈 springboot3 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1.7 配置文件说明:启动配置文件优先级:properties高于yml 配置文件application.yml yml是 JSON 的超集,简洁而强大&#xf…

[Angular] 笔记 24:ngContainer vs. ngTemplate vs. ngContent

请说明 Angular 中 ngContainer, ngTemplate 和 ngContent 这三者之间的区别。 chatgpt 回答: 这三个在 Angular 中的概念是关于处理和组织视图的。 1. ngContainer: ngContainer 是一个虚拟的 HTML 容器,它本身不会在最终渲染…

YOLOv8改进 | 2023注意力篇 | EMAttention注意力机制(附多个可添加位置)

一、本文介绍 本文给大家带来的改进机制是EMAttention注意力机制,它的核心思想是,重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中…

Axure骚操作:【制作可暂停与不可暂停进度加载条】

目录 一、不可暂停进度条 1.1 前期准备 1.2 效果假想 1.3 适用场景 1.4 实现步骤 (1)除按钮外的元件设置隐藏 (2)给按钮添加交互 (3)给变量值文本标签添加交互 (4)给进度条矩…

DrGraph原理示教 - OpenCV 4 功能 - 颜色空间

前言 前段时间,甲方提出明确需求,让把软件国产化。稍微研究了一下,那就转QT开发,顺便把以前的功能代码重写一遍。 至于在Ubuntu下折腾QT、OpenCV安装事宜,网上文章很多,照猫画虎即可。 这个过程&#xff0…

『番外篇七』SwiftUI 获取视图全局位置在 NavigationStack 中失效的解决方法

概览 在 番外篇六』SwiftUI 取得任意视图全局位置的三种方法 这篇博文里,我们详细讨论了在 SwiftUI 中获取任意视图全局坐标的几种方法。 不过,我们也从中提到了某些方法无法适用于 NavigationStack 视图,本篇博文由此应运而生。 在本篇博文种,您将学到如下内容: 概览1.…

Redis:原理速成+项目实战——Redis的Java客户端

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成项目实战——Redis常见命令(数据结构、常见命令总结) 📚订阅专栏&…