代码之家  ›  专栏  ›  技术社区  ›  karlphillip

NumPy如何将复数矩阵相乘?

  •  0
  • karlphillip  · 技术社区  · 5 年前

    我一直在想背后的算法 复数的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 但是我仍然没有找到答案。有什么建议吗?

    0 回复  |  直到 5 年前
        1
  •  3
  •   Mercury    5 年前

    当你计算 A*B 它实际上是将矩阵元素相乘,得到的是哈达玛积。不是马特穆。例如 (17.+0.j) * (60.+0.j) = 1020.+0.j ,这是输出中的第一个元素。矩阵乘法用 np.dot 或者只是 @ 接线员,即, A@B .

        2
  •  1
  •   karlphillip    5 年前

    找到了!好像是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 对它的性能进行了有趣的讨论。