【问题标题】:Tensor Product in PythonPython 中的张量积
【发布时间】:2020-09-21 05:10:32
【问题描述】:

谁能告诉我如何在 python 中做张量积​​。我的意思是,例如,我有 5 (6,1) (Class: numpy.ndarray) 数组,我需要这 5 (6,1) 数组的张量积,这样我的输出将是 (6,6, 6,6,6) 张量。

【问题讨论】:

  • 添加案例。

标签: python tensorflow numpy-ndarray


【解决方案1】:

为了得到那个张量。你必须有 6 个数组。 因为对于 5 个向量,在做向量乘积时只能选择 5x6x5 的形状。这张图片会让你更容易概括

因此,对于 6 个数组,我将其称为 a0,a1...a5。当您通过应用转置将 1 倍增给其他人时。在numpy中,你可以创建一个循环:a0*a0.T,a0*a1.T.....

您现在将拥有 6x6 的 a0、6x6 的 a1、... 6x6 的 a5。现在将它们堆叠在一起。 (a0,a2...a5) 的 6x6x6。现在,你需要通过切换a0,a1,...的位置来形成其他(6x6x6)形成(6x6x6x6)

继续这样做,你可以得到一个 (6x6x6x6x6) 张量

【讨论】:

  • 对不起,我不理解上述推论,但根据维基百科,(6,) 和 (6,) 的外积或张量积给出 (6,6) 张量。因此,使用 5 (6,) 个向量,它给出 (6,6,6,6,6) 张量。 en.wikipedia.org/wiki/Outer_product.
  • (6,) 的乘积将与 (6,).T 一起​​使用。然后使用 (6,) 并重复 (6,).T。然后 (6,)。不能是 66666
  • 但是,我是通过使用 einsum 得到的(这篇文章中的代码)。
【解决方案2】:

以下内容对您有用吗?

import numpy as np

a1 = np.arange(6)
a2 = np.arange(6)
a3 = np.arange(6)
a4 = np.arange(6)
a5 = np.arange(6)

oo = np.einsum('i,j,k,l,m',a1,a2,a3,a4,a5)

【讨论】:

  • 是的,它工作正常。但是,我有 shape(6,1) 列向量,上面的代码没有使用 shape(6,1) 列向量执行,所以我将向量重新整形为 (6,),然后我得到了所需的输出。上面的代码给出了一维数组的张量积(例如:shape(6,)。但是如果我采用一个看起来与 (6,) 相同但不会生成相同张量积输出的 2D shape(1,6))。事实上这就是张量积的工作原理。例如:shape(1,6) 和 shape(1,6) 的张量积给出 (1,6,1,6) 输出。但是 shape(6,) 和 shape 的张量积(6,) 使用 einsum 给了我想要的 shape(6,6) 输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多