在我学会了如何使用 einsum
之后,我现在正试图了解 np.tensordot
是如何工作的。
但是,我有点迷茫,尤其是关于参数 axes
的各种可能性。
为了理解它,因为我从未练习过张量微积分,所以我使用以下示例:
A = np.random.randint(2, size=(2, 3, 5))
B = np.random.randint(2, size=(3, 2, 4))
在这种情况下,有哪些不同的可能性 np.tensordot
你将如何手动计算它?
原文由 floflo29 发布,翻译遵循 CC BY-SA 4.0 许可协议
tensordot
的想法非常简单——我们输入数组和相应的轴,沿着这些轴进行总和减少。参与求和归约的轴在输出中被删除,输入数组中的所有剩余轴在输出中 展开 为不同的轴,保持输入数组的馈送顺序。让我们看几个具有一个和两个轴和归约的示例案例,并交换输入位置,看看输出中的顺序是如何保持的。
一、减和一轴
输入:
情况1:
案例 #2(与案例 #1 相同,但输入被交换):
二。和归约的两个轴
输入:
情况1:
案例#2:
我们可以将其扩展到尽可能多的轴。