Python张量produ

2024-09-27 07:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下问题。{I和}中存储了}和}的值。 我的一个计算是这样的:

enter image description here

<w_j>w_j的期望值,<sigma_i>是{}的期望值。(也许我现在应该称之为sigma,因为它与标准偏差无关)现在为了进一步的计算,我还需要方差。为了得到方差,我需要计算: enter image description here

现在,当我用numpy.tensordot将第一个公式实现到python中时,我真的很高兴它起作用了,因为这非常抽象,我不习惯张量。代码如下所示:

erc = numpy.tensordot(numpy.tensordot(re, ewp, axes=1), ewp, axes=1)

现在这是可行的,我的问题是写出第二个公式的正确形式。我的一个尝试是:

^{pr2}$

但是这给了我一个标量而不是一个向量。另一个尝试是:

serc = numpy.einsum('m, m', numpy.einsum('lm, l -> m',
numpy.einsum('klm, k -> lm', numpy.einsum('jklm, j -> klm',
numpy.einsum('ijk, ilm -> jklm', re, re), ewp), ewp), ewp), ewp)

向量的长度为l,张量的维数为l * l * l。我希望我的问题是可以理解的,并提前谢谢你!在

编辑:第一个公式在python中也可以写成:erc2 = numpy.einsum('ik, k -> i', numpy.einsum('ijk, k -> ij', re, ewp), ewp)


Tags: renumpy向量sigma公式lm方差axes
1条回答
网友
1楼 · 发布于 2024-09-27 07:33:37

你可以通过一系列的削减来实现,比如-

p1 = np.tensordot(re,ewp,axes=(1,0))
p2 = np.tensordot(p1,ewp,axes=(1,0))
out = p2**2

说明

首先,我们可以将其分为两组操作:

^{pr2}$

在这两组中执行的操作是相同的。因此,我们可以计算一组,并根据它得出最终的输出。

现在,要计算R(i,j,k),<;wj>;,<;wk并得到(i),我们需要用w沿R的第二和第三个轴执行元素乘法,然后沿着这些轴执行sum-reduction。在这里,我们用两个步骤来完成这项工作tensordots-

[1] R(i,j,k) , < wj > to get p1(i,k)
[2] p1(i,k) , < wk > to get p2(i)

因此,我们得到一个向量p2。与第二组类似,结果将是一个相同的向量。所以,为了得到最终的输出,我们只需要平方这个向量,即p**2

相关问题 更多 >

    热门问题