【问题标题】:How does NumPy calculate inner product of two 2D matrices?NumPy 如何计算两个二维矩阵的内积?
【发布时间】:2022-01-26 19:54:17
【问题描述】:

我无法理解 NumPy 如何计算两个二维矩阵的内积。

例如这个程序:

mat = [[1, 2, 3, 4],
       [5, 6, 7, 8]]

result = np.inner(mat, mat)

print('\n' + 'result: ')
print(result)
print('')

产生这个输出:

result: 
[[ 30  70]
 [ 70 174]]

这些数字是如何计算出来的??

在有人说“阅读文档”之前,https://numpy.org/doc/stable/reference/generated/numpy.inner.html,我不清楚这个结果是如何计算的。

在有人说“查看维基百科文章”之前,https://en.wikipedia.org/wiki/Frobenius_inner_product 显示了我不熟悉的各种数学符号,并且没有解释如何执行上述计算。

在有人说“Google it”之前,我确实这样做了,大多数示例都是针对一维数组(这是一个简单的计算),而像此视频 https://www.youtube.com/watch?v=_YtHyjcQ1gw 的其他示例产生的结果与 NumPy 不同。

任何澄清将不胜感激。

【问题讨论】:

    标签: numpy


    【解决方案1】:
    In [55]: mat = [[1, 2, 3, 4],
        ...:        [5, 6, 7, 8]]
        ...: 
    In [56]: arr = np.array(mat)
    
    In [58]: arr.dot(arr.T)
    Out[58]: 
    array([[ 30,  70],
           [ 70, 174]])
    

    这是 (2,4) 与 (4,2) 的矩阵乘积,得到 (2,2)。这是通常的“跨列扫描”方法。

    其他几个这样做的表达式:

    我喜欢einsum 的表达能力,其中乘积之和在j 维度上:

    In [60]: np.einsum('ij,kj->ik',arr,arr)
    Out[60]: 
    array([[ 30,  70],
           [ 70, 174]])
    

    使用广播的元素乘法和求和:

    In [61]: (arr[:,None,:]*arr[None,:,:]).sum(axis=-1)
    Out[61]: 
    array([[ 30,  70],
           [ 70, 174]])
    

    没有sum,产品是:

    In [62]: (arr[:,None,:]*arr[None,:,:])
    Out[62]: 
    array([[[ 1,  4,  9, 16],
            [ 5, 12, 21, 32]],
    
           [[ 5, 12, 21, 32],
            [25, 36, 49, 64]]])
    

    你发现了哪些价值。

    【讨论】:

      【解决方案2】:

      我终于找到了这个网站https://www.tutorialspoint.com/numpy/numpy_inner.htm,它可以更好地解释事情。以上计算如下:

      (1*1)+(2*2)+(3*3)+(4*4)     (1*5)+(2*6)+(3*7)+(4*8)
        1  +  4  +  9  + 16         5  + 12  + 21  + 32
               = 30                        = 70
      
      (5*1)+(6*2)+(7*3)+(8*4)     (5*5)+(6*6)+(7*7)+(8*8)
        5  + 12  + 21  + 32        25  + 36  + 49  + 64
               = 70                        = 174
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多