NumPy 如何将复数矩阵相乘?
How does NumPy multiply matrices of complex numbers?
我一直在努力找出 NumPy 的复数矩阵乘法背后的算法:
import numpy as np
A = np.array([[17.+0.j, -3.+0.j],
[-7.+0.j, 1.+0.j]])
B = np.array([[ 60.+0.j, -4.+0.j],
[-12.+0.j, 0.+0.j]])
print(A * B)
它输出:
[[1020.+0.j 12.-0.j]
[ 84.-0.j 0.+0.j]]
standard matrix multiplication 的结果非常不同,您可以从下面的数字中看出,所以我想知道 NumPy 到底做了什么:
[[1056.+0.j -68.+0.j]
[-432.+0.j 28.+0.j]]
我一直在尝试仅使用 for
循环来重现他们的乘法算法,但我仍然没有找到答案。有什么建议吗?
当您计算 A*B
时,它实际上是按元素乘以矩阵,得到所谓的 hadamard 乘积。这不是马特穆尔。例如 (17.+0.j) * (60.+0.j) = 1020.+0.j
,这是输出中的第一个元素。对于矩阵乘法,使用 np.dot
或简单地使用 @
运算符,即 A@B
.
找到了!似乎 NumPy 使用 np.multiply()
(逐元素乘法),因此结果不同。
这是使用 for
循环对该函数的简单实现:
def np_multiply(X, Y):
height = X.shape[0]
width = X.shape[1]
output = np.empty((height, width), dtype=np.complex128)
for i in range(height):
for j in range(width):
output[i,j] = X[i, j] * Y[i, j]
return output
This post 对其性能进行了有趣的讨论。
我一直在努力找出 NumPy 的复数矩阵乘法背后的算法:
import numpy as np
A = np.array([[17.+0.j, -3.+0.j],
[-7.+0.j, 1.+0.j]])
B = np.array([[ 60.+0.j, -4.+0.j],
[-12.+0.j, 0.+0.j]])
print(A * B)
它输出:
[[1020.+0.j 12.-0.j]
[ 84.-0.j 0.+0.j]]
standard matrix multiplication 的结果非常不同,您可以从下面的数字中看出,所以我想知道 NumPy 到底做了什么:
[[1056.+0.j -68.+0.j]
[-432.+0.j 28.+0.j]]
我一直在尝试仅使用 for
循环来重现他们的乘法算法,但我仍然没有找到答案。有什么建议吗?
当您计算 A*B
时,它实际上是按元素乘以矩阵,得到所谓的 hadamard 乘积。这不是马特穆尔。例如 (17.+0.j) * (60.+0.j) = 1020.+0.j
,这是输出中的第一个元素。对于矩阵乘法,使用 np.dot
或简单地使用 @
运算符,即 A@B
.
找到了!似乎 NumPy 使用 np.multiply()
(逐元素乘法),因此结果不同。
这是使用 for
循环对该函数的简单实现:
def np_multiply(X, Y):
height = X.shape[0]
width = X.shape[1]
output = np.empty((height, width), dtype=np.complex128)
for i in range(height):
for j in range(width):
output[i,j] = X[i, j] * Y[i, j]
return output
This post 对其性能进行了有趣的讨论。