[英]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]]
标准矩阵乘法的结果非常不同,如下面的数字所示,所以我想知道 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
,这是 output 中的第一个元素。 对于矩阵乘法,使用np.dot
或简单地使用@
运算符,即A@B
。
找到了! 似乎 NumPy 使用np.multiply()
(逐元素乘法),因此结果不同。
这是使用for
循环的 function 的简单实现:
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
这篇文章对其性能进行了有趣的讨论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.