numpy dot() 和 inner() 之间的区别

发布于 2022-05-26 22:58:50

区别

import numpy as np
np.dot(a,b)

import numpy as np
np.inner(a,b)

我尝试的所有示例都返回了相同的结果。维基百科对两者都有相同的文章?!在它的描述inner()说,它的行为在更高维度上是不同的,但我无法产生任何不同的输出。我应该使用哪一个?

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2022-05-26
    为面试而生,有面试问题,就找面试哥。

    numpy.dot

    对于二维数组,它相当于矩阵乘法,对于一维数组,它相当于向量的内积(没有复共轭)。对于 N 维,它是 a 的最后一个轴和b的倒数第二个的和积:

    numpy.inner

    一维数组(没有复共轭)的向量的普通内积,在更高维度上是最后一个轴的和积。

    (强调我的。)

    作为一个例子,考虑这个带有二维数组的例子:

    >>> a=np.array([[1,2],[3,4]])
    >>> b=np.array([[11,12],[13,14]])
    >>> np.dot(a,b)
    array([[37, 40],
           [85, 92]])
    >>> np.inner(a,b)
    array([[35, 41],
           [81, 95]])
    

    因此,您应该使用的那个是为您的应用程序提供正确行为的那个。


    性能测试

    (请注意,我只测试一维情况,因为这是唯一.dot给出.inner相同结果的情况。)

    >>> import timeit
    >>> setup = 'import numpy as np; a=np.random.random(1000); b = np.random.random(1000)'
    
    >>> [timeit.timeit('np.dot(a,b)',setup,number=1000000) for _ in range(3)]
    [2.6920320987701416, 2.676928997039795, 2.633111000061035]
    
    >>> [timeit.timeit('np.inner(a,b)',setup,number=1000000) for _ in range(3)]
    [2.588860034942627, 2.5845699310302734, 2.6556360721588135]
    

    所以也许.inner更快,但我的机器目前负载相当大,所以时间不一致,也不一定非常准确。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看