NumPy - 点积
什么是点积?
点积,也称为标量积,是一种数学运算,它接受两个等长的数字序列(通常是向量),并返回一个数字。
在矩阵的语境中,点积用于执行矩阵乘法,这是数学、物理和工程等许多领域的基本运算。
两个向量 a 和 b 的点积定义为 −
a 。 b = a1b1 + a2b2 + ... + anbn
其中,ai 和 bi 分别是向量 a 和 b 的分量,n 是维数。
使用点积的矩阵乘法
在矩阵乘法中,点积用于将第一个矩阵的行乘以第二个矩阵的列。这将生成一个新的矩阵,其中每个元素都是相应行向量和列向量的点积。
考虑两个矩阵 A 和 B −
A = [[a11, a12], [a21, a22]] B = [[b11, b12], [b21, b22]]
乘积 C = A . B 为 −
C = [[a11b11 + a12b21, a11b12 + a12b22], [a21b11 + a22b21, a21b12 + a22b22]]
使用 NumPy 进行点积运算
NumPy 提供了一种使用 dot() 函数进行点积运算的便捷方法。此函数可用于向量点积和矩阵乘法。
示例
以下示例中,点积计算为 (1 * 4) + (2 * 5) + (3 * 6) = 32 −
import numpy as np # 定义两个向量 vector_1 = np.array([1, 2, 3]) vector_2 = np.array([4, 5, 6]) # 计算点积 dot_product = np.dot(vector_1,vector_2) print(dot_product)
以下是得到的输出 −
32
矩阵点积积
要计算两个矩阵的点积,我们使用相同的 dot() 函数。
示例
在此示例中,两个矩阵的点积计算为 −
[[1*5 + 2*7, 1*6 + 2*8], [3*5 + 4*7, 3*6 + 4*8]]
import numpy as np # 定义两个矩阵 matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) # 计算点积乘积 matrix_product = np.dot(matrix_1, matrix_2) print(matrix_product)
以下是得到的输出 −
[[19 22] [43 50]]
高维数组的点积
NumPy 的 dot() 函数也可以处理高维数组。在本例中,该函数计算第一个数组的最后一个轴与第二个数组的倒数第二个轴的点积。
示例
在本例中,对每对子数组计算点积,得到一个新的三维数组 -
import numpy as np # 定义两个三维数组 array_1 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) array_2 = np.array([[[1, 0], [0, 1]], [[1, 1], [1, 0]]]) # 计算点积 array_product = np.dot(array_1, array_2) print(array_product)
以下是得到的输出 -
[[[[ 1 2] [ 3 1]] [[ 3 4] [ 7 3]]] [[[ 5 6] [11 5]] [[ 7 8] [15 7]]]]
使用 @ 运算符进行点积运算
在 Python 3.5 及更高版本中,@ 运算符可以替代 dot() 函数进行矩阵乘法运算。这使得代码更具可读性和简洁性。
示例
以下示例的结果与使用 dot() 函数相同,但语法更简洁 -
import numpy as np # 定义两个矩阵 matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) # 使用 @ 运算符进行矩阵乘法 matrix_product = matrix_1 @ matrix_2 print(matrix_product)
以下是得到的输出 -
[[19 22] [43 50]]
点积的应用
点积是一种基本运算,在各个领域都有广泛的应用 −
- 机器学习:点积用于计算向量之间的相似度,这在支持向量机和神经网络等算法中至关重要。
- 物理学:点积用于计算力所做的功,并将向量投影到不同的方向。
- 计算机图形学:点积用于着色计算,并用于确定表面和光源之间的角度。
- 线性代数:点积是求解线性方程组和变换的基础。
示例:在机器学习中使用点积
在机器学习中,点积通常用于计算神经网络中的权重和偏差。
在本例中,点积计算输入特征的加权和,这是计算神经网络输出的重要步骤 -
import numpy as np # 定义输入向量(特征) input_vector = np.array([0.5, 1.5, -1.0]) # 定义权重向量(权重) weights = np.array([2.0, -1.0, 0.5]) # 计算加权和(点积) output = np.dot(input_vector, weights) print(output)
以下是得到的输出 -
-1.0