NumPy - 点积



什么是点积?

点积,也称为标量积,是一种数学运算,它接受两个等长数字序列(通常是向量)并返回单个数字。

在矩阵的上下文中,点积用于执行矩阵乘法,这是许多数学、物理和工程领域的基本运算。

两个向量ab的点积定义为:

a . b = a1b1 + a2b2 + ... + anbn

其中,aibi分别是向量ab的分量,n是维数。

使用点积进行矩阵乘法

在矩阵乘法中,点积用于将第一个矩阵的行乘以第二个矩阵的列。这会产生一个新矩阵,其中每个元素都是对应行和列向量的点积。

考虑两个矩阵AB

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

# Define two vectors
vector_1 = np.array([1, 2, 3])
vector_2 = np.array([4, 5, 6])

# Compute dot product
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

# Define two matrices
matrix_1 = np.array([[1, 2], [3, 4]])
matrix_2 = np.array([[5, 6], [7, 8]])

# Compute dot product
matrix_product = np.dot(matrix_1, matrix_2)
print(matrix_product)

以下是获得的输出:

[[19 22]
 [43 50]]

更高维数组的点积

NumPy 的dot()函数也可以处理更高维的数组。在这种情况下,该函数计算第一个数组的最后一个轴和第二个数组的倒数第二个轴上的点积。

示例

在这个例子中,为每一对子数组计算点积,得到一个新的三维数组:

import numpy as np

# Define two 3-dimensional arrays
array_1 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
array_2 = np.array([[[1, 0], [0, 1]], [[1, 1], [1, 0]]])

# Compute dot product
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

# Define two matrices
matrix_1 = np.array([[1, 2], [3, 4]])
matrix_2 = np.array([[5, 6], [7, 8]])

# Using @ operator for matrix multiplication
matrix_product = matrix_1 @ matrix_2
print(matrix_product)

以下是获得的输出:

[[19 22]
 [43 50]]

点积的应用

点积是一个基本运算,在各个领域都有很多应用:

  • 机器学习:点积用于计算向量之间的相似度,这在支持向量机和神经网络等算法中至关重要。
  • 物理学:点积用于计算力所做的功以及在不同方向上投影向量。
  • 计算机图形学:点积用于着色计算以及确定表面和光源之间的角度。
  • 线性代数:点积是求解线性方程组和变换的基础。

示例:在机器学习中使用点积

在机器学习中,点积通常用于计算神经网络中的权重和偏差。

在这个例子中,点积计算输入特征的加权和,这是计算神经网络输出的重要步骤:

import numpy as np

# Define input vector (features)
input_vector = np.array([0.5, 1.5, -1.0])

# Define weight vector (weights)
weights = np.array([2.0, -1.0, 0.5])

# Compute the weighted sum (dot product)
output = np.dot(input_vector, weights)
print(output)

以下是获得的输出:

-1.0
广告