繁体   English   中英

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]]

标准矩阵乘法的结果非常不同,如下面的数字所示,所以我想知道 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM