一、说明
与常规数学一样,数组算术本质上是关于加法、减法、乘法和除法。在 中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 的文档是探索其他功能和特性的宝贵资源,使您能够在数据科学和机器学习工作中释放数组算术的全部潜力。
请记住,学习是一个持续的过程。因此,继续学习,继续创造并与他人分享!
注意:如果您是机器学习输出者,并且有一些好的建议来改进此博客以供分享,请撰写评论并做出贡献。
如果您需要有关机器学习的更多更新并希望做出贡献,请关注并注册以下内容