Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的张量积_Python_Tensorflow_Numpy Ndarray - Fatal编程技术网

Python中的张量积

Python中的张量积,python,tensorflow,numpy-ndarray,Python,Tensorflow,Numpy Ndarray,有人能告诉我如何用python做张量积吗。我的意思是,例如,我有5(6,1)(类:numpy.ndarray)个数组,我需要这5(6,1)个数组的张量积,所以我的输出将是(6,6,6,6,6)张量。为了得到那个张量。您必须有6个数组。 因为对于5个向量,在进行向量乘积时只能选择5x6x5的形状。这张图片会让你更容易概括 所以,对于6个数组,我将其称为a0,a1…a5。当您通过应用转置将1复制到其他对象时。在numpy中,您可以创建一个循环:a0*a0.T,a0*a1.T 您现在将拥有a0的6x

有人能告诉我如何用python做张量积吗。我的意思是,例如,我有5(6,1)(类:numpy.ndarray)个数组,我需要这5(6,1)个数组的张量积,所以我的输出将是(6,6,6,6,6)张量。

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

所以,对于6个数组,我将其称为a0,a1…a5。当您通过应用转置将1复制到其他对象时。在numpy中,您可以创建一个循环:
a0*a0.T
a0*a1.T

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


继续执行此操作,以获得进一步的结果,您可以获得(6x6)张量

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

所以,对于6个数组,我将其称为a0,a1…a5。当您通过应用转置将1复制到其他对象时。在numpy中,您可以创建一个循环:
a0*a0.T
a0*a1.T

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


继续这样做,以获得一个(6x6)张量。下面的步骤对你有用吗

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)

以下内容对你有用吗

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),然后得到了所需的输出。上面的代码给出了一维数组的张量积(例如:形状(6),但是如果我采用一个看起来与(6)相同的二维形状(1,6),但不会产生相同的张量积输出。事实上,这就是张量积的工作原理。例如:形状(1,6)和形状(1,6)的张量积给出(1,6,1,6)输出。但是形状(6)的张量积而shape(6,)通过使用einsum的shape(6,6)给了我所需的输出。是的,它工作得很好。但是,我有列向量shape(6,1)上面的代码没有使用shape(6,1)列向量执行,所以我将向量重塑为(6,),然后我得到了所需的输出。上面的代码给出了一维数组的张量积(例如:shape(6,)但是如果我用一个看起来和(6)一样的二维形状(1,6),但不会产生相同的张量积输出。事实上,这就是张量积的工作原理。例如:形状(1,6)和形状(1,6)的张量积给出(1,6,1,6)输出。但是形状(6)和形状(6)的张量积给出了形状(6,6)的期望输出使用einsum。对不起,我不理解上面的推论,但是根据维基百科,外积或(6,)和(6,)的张量积给出(6,6)张量。因此,对于5(6,)向量,它给出(6,6,6,6,6)张量。((6,)的积将与(6,).t一起。然后与(6,)一起,并与(6,)重复。然后(6,)。它不可能是66666,但我是通过使用einsum(这篇文章中的代码)得到的。对不起,我不理解上面的推论,但根据维基百科,外积或张量积(6,)和(6,)给出(6,6)张量。因此,对于5(6,)个向量,它给出(6,6,6,6,6)张量。((6,)的乘积将与(6,).t一起。然后与(6,)一起,并与(6,)一起重复。)它不可能是66666,但我是通过使用einsum(本文中的代码)获得的。