在 Python 中,计算 Hadamard 积(也称为逐元素乘积)可以使用多种方法,Hadamard 积是指两个相同形状的矩阵对应元素相乘的结果,以下是几种实现方式:

方法 1:使用 NumPy(推荐)
NumPy 是 Python 中处理矩阵运算的高效库,支持逐元素乘法:
import numpy as np
# 定义两个相同形状的矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# Hadamard 积(逐元素相乘)
hadamard_product = A * B
print("矩阵 A:\n", A)
print("矩阵 B:\n", B)
print("Hadamard 积:\n", hadamard_product)
输出:
矩阵 A:
[[1 2]
[3 4]]
矩阵 B:
[[5 6]
[7 8]]
Hadamard 积:
[[ 5 12]
[21 32]]
方法 2:使用列表推导式(纯 Python)
如果不使用 NumPy,可以用嵌套列表推导式实现:
# 定义两个矩阵(列表的列表)
A = [[1, 2], [3, 4]]
B = [[5, 6], [7, 8]]
# Hadamard 积
hadamard_product = [
[A[i][j] * B[i][j] for j in range(len(A[0]))]
for i in range(len(A))
]
print("Hadamard 积:", hadamard_product)
输出:

Hadamard 积: [[5, 12], [21, 32]]
方法 3:使用 zip 和嵌套循环
另一种纯 Python 的方式,通过 zip 遍历行和列:
A = [[1, 2], [3, 4]]
B = [[5, 6], [7, 8]]
hadamard_product = []
for row_a, row_b in zip(A, B):
new_row = [a * b for a, b in zip(row_a, row_b)]
hadamard_product.append(new_row)
print("Hadamard 积:", hadamard_product)
输出:
Hadamard 积: [[5, 12], [21, 32]]
关键点总结
- 形状要求:Hadamard 积要求两个矩阵的形状完全相同(行数和列数一致)。
- 运算本质:是逐元素相乘,而非矩阵乘法( 或
np.dot)。 - 性能:NumPy 的方法比纯 Python 快得多,适合大规模矩阵。
如果需要进一步操作(如广播机制、更高维度的 Hadamard 积),NumPy 提供了更灵活的支持。

