矩阵相乘

在 Python 中,数组相乘有多种方式,取决于你想要实现的是元素级别的相乘还是矩阵乘法。这两种操作在数学和数据科学中有本质区别。


1. 元素级别相乘 (Element-wise Multiplication)

这是最常见的数组相乘方式,它将两个形状相同的数组的对应位置的元素相乘,然后生成一个新的数组。

使用 * 运算符

在 NumPy 中,使用 * 运算符可以很方便地实现元素级别相乘。

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 两个数组形状相同
element_wise_product = arr1 * arr2

print(element_wise_product)
# 输出: [ 4 10 18]
# 1*4=4, 2*5=10, 3*6=18

这同样适用于多维数组:

matrix1 = np.array([[1, 2],
                    [3, 4]])
matrix2 = np.array([[5, 6],
                    [7, 8]])

element_wise_product_2d = matrix1 * matrix2
print(element_wise_product_2d)
# 输出:
# [[ 5 12]
#  [21 32]]

2. 矩阵乘法 (Matrix Multiplication)

矩阵乘法是一种更复杂的数学运算,它的规则是:第一个矩阵的与第二个矩阵的进行点积。

注意:

  • 只有当第一个矩阵的列数等于第二个矩阵的行数时,矩阵乘法才能进行。
  • 结果矩阵的形状将是 (第一个矩阵的行数, 第二个矩阵的列数)

使用 @ 运算符

在 Python 3.5 及更高版本中,使用 @ 运算符是执行矩阵乘法的标准方式。

import numpy as np

A = np.array([[1, 2],
              [3, 4]])

B = np.array([[5, 6],
              [7, 8]])

matrix_product = A @ B
print(matrix_product)
# 输出:
# [[19 22]
#  [43 50]]

计算过程:

  • 结果矩阵的第一个元素 19 是由 A 的第一行 [1, 2]B 的第一列 [5, 7] 的点积得到的,即 (1*5) + (2*7) = 5 + 14 = 19
  • 结果矩阵的第二个元素 22 是由 A 的第一行 [1, 2]B 的第二列 [6, 8] 的点积得到的,即 (1*6) + (2*8) = 6 + 16 = 22
  • 以此类推。

使用 np.dot() 函数

np.dot() 是另一种执行矩阵乘法的常见方法,它的功能和 @ 运算符几乎相同。

matrix_product_dot = np.dot(A, B)
print(matrix_product_dot)
# 输出:
# [[19 22]
#  [43 50]]

总结

乘法类型 运算符/函数 描述 应用场景
元素级别相乘 * 对应位置的元素相乘。 数据预处理、特征缩放等。
矩阵乘法 @np.dot() 矩阵的行与列的点积。 线性代数、神经网络中的权重计算等。

在进行数组相乘时,一定要分清这两种操作的区别,因为它们的结果和应用场景完全不同。

posted @ 2025-09-15 22:10  李大嘟嘟  阅读(16)  评论(0)    收藏  举报