区别
import numpy as np np.dot(a,b)
和
import numpy as np np.inner(a,b)
我尝试的所有示例都返回了相同的结果。维基百科对两者都有相同的文章?!在它的描述中inner()说,它的行为在更高维度上是不同的,但我无法产生任何不同的输出。我应该使用哪一个?
inner()
numpy.dot:
numpy.dot
对于二维数组,它相当于矩阵乘法,对于一维数组,它相当于向量的内积(没有复共轭)。对于 N 维,它是 a 的最后一个轴和b的倒数第二个轴的和积:
numpy.inner:
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相同结果的情况。)
.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更快,但我的机器目前负载相当大,所以时间不一致,也不一定非常准确。