gpt4 book ai didi

python - numpy.tensordot 命令如何工作?此命令中对轴求和的含义是什么?

转载 作者:行者123 更新时间:2023-12-01 08:18:26 24 4
gpt4 key购买 nike

我想了解如何 numpy.tensordot命令有效。我浏览了该论坛上发布的与此命令相关的不同问题。而且axes (1,0)表明axes 1 in aaxes 0 in b将进行总结。因此,我将沿着 a 中的轴 1 和沿着 b 中的零轴的项相加,并手动计算答案,但结果不同。我对沿特定轴求和的理解可能是错误的。有人可以解释一下我们如何在以下代码中获得最终结果吗?

a = numpy.array([[1,2],[3,4]])
b = numpy.array([[0,5],[-1,20]])

c = numpy.tensordot(a,b,axes=(1,0))

print(c)
print("result")
[[-2 45]
[-4 95]]

最佳答案

In [432]: a=np.array([[1,2],[3,4]]); b=np.array([[0,5],[-1,20]])                
In [433]: np.tensordot(a,b,axes=(1,0))
Out[433]:
array([[-2, 45],
[-4, 95]])

(1,0) 表示 a 的轴 1 和 b 的轴 0 是乘积和轴。这只是正常的 np.dot 配对:

In [434]: np.dot(a,b)                                                           
Out[434]:
array([[-2, 45],
[-4, 95]])

我发现 einsum 表示法更清晰:

In [435]: np.einsum('ij,jk->ik',a,b)                                            
Out[435]:
array([[-2, 45],
[-4, 95]])

无论如何,这都是我们在学校学到的矩阵乘积 - 将手指滑过 a 的行,然后滑过 b 的列。

[[1*0+2*-1, 1*5+2*20], ...]  

又一个表达式 - 从 einsum 扩展而来:

In [440]: (a[:,:,None]*b[None,:,:]).sum(axis=1)                                 
Out[440]:
array([[-2, 45],
[-4, 95]])

tensordot reshape 并转置轴,旨在将问题简化为对 np.dot 的简单调用。然后它根据需要 reshape /转回。详细信息取决于轴参数。在您的情况下,不需要重新整形,因为您的规范与默认的 dot 操作匹配。

元组轴参数相对容易解释。还有一个标量轴的情况(0、1、2 等),这有点棘手。我在另一篇文章中对此进行了探讨。

关于python - numpy.tensordot 命令如何工作?此命令中对轴求和的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54848830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com