杰瑞科技汇

Python矩阵Hadamard积如何实现?

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

Python矩阵Hadamard积如何实现?-图1
(图片来源网络,侵删)

方法 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)

输出:

Python矩阵Hadamard积如何实现?-图2
(图片来源网络,侵删)
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]]

关键点总结

  1. 形状要求:Hadamard 积要求两个矩阵的形状完全相同(行数和列数一致)。
  2. 运算本质:是逐元素相乘,而非矩阵乘法( 或 np.dot)。
  3. 性能:NumPy 的方法比纯 Python 快得多,适合大规模矩阵。

如果需要进一步操作(如广播机制、更高维度的 Hadamard 积),NumPy 提供了更灵活的支持。

Python矩阵Hadamard积如何实现?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇