问题标签 [numpy-einsum]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1702 浏览

python - 我可以在 `numpy.einsum` 中使用超过 26 个字母吗?

np.einsum用来乘以概率表,例如:

问题是我正在处理超过 26 个随机变量(轴),所以如果我为每个随机变量分配一个字母,我的字母就会用完。有没有另一种方法可以指定上述操作来避免这个问题,而无需使用混乱的np.sum操作np.dot

0 投票
1 回答
365 浏览

python - numpy einsum:嵌套点积

我有两个n逐个数k3ab例如,

它喜欢计算所有“三元组”对的点积,即

一个更好的方法可能是einsum,但我似乎无法弄清楚索引。

这里有什么提示吗?

0 投票
1 回答
109 浏览

python - 在二维数组上矢量化 NumPy 三重乘积

我正在尝试在下面N x N调用的数组上对以下三重乘积运算进行矢量化p

我认为numpy.einsum应该在这里使用,尽管我实际上并没有对重复的索引进行求和,但我无法确定它。想法?

0 投票
2 回答
162 浏览

python - numpy数组的计算/操作

希望尽快进行此计算。我有 X 作为 nxm numpy 数组。我想将 Y 定义为:

Y_11 = 1 / (exp(X_11-X_11) + exp(X_11-X_12) + ... exp(X_11 - X_1N) ).

或 Y_00

1/np.sum(np.exp(X[0,0]-X[0,:]))

所以基本上,Y 也是 nxm,其中 i,j 元素是 1 / sum_j' exp(X_ij - X_ij')

任何提示都会很棒!谢谢。

根据要求的示例代码:

0 投票
2 回答
1379 浏览

python - 与 einsum 的交叉产品

我正在尝试尽快计算许多 3x1 向量对的叉积。这个

给出了正确的答案,但出于对类似问题的回答的动机,我认为这einsum会让我有所收获。我发现两者

计算叉积,但它们的性能令人失望:两种方法的性能都比np.cross

关于如何改进einsums 的任何想法?

0 投票
1 回答
172 浏览

numpy - 在多维数组产品中,如何对齐有和没有求和的轴?

当有一些重复的索引相加而其他索引不相加时,执行数组操作的最佳方法是什么?似乎我可能不得不使用这些操作,但如果有一个带有标志的替代方案,用于对齐但未求和的尺寸, einsum那会更好。tensordot

有没有人知道一个快速的数值例程(也许在 lapack 中?),它的行为类似于 tensordot,除了某些轴可以对齐而不被求和?

==

这是一个示例代码,用于显示所需的数组操作类型。我需要的操作是由method_summethod_einsum和完成的method_matmul。类似的运算在匹配的 j 轴上求和,由method2_einsum和完成method2_tensordot

通过比较时间,似乎tensordot应该能够einsum解决第一个问题。但是,它没有在不汇总轴的情况下对齐轴的功能。

以下是我电脑上各种例程的一些时间。Tensordot 可以击败 einsum,method2因为它使用多个内核。我想实现类似于tensordotJ 轴和 L 轴对齐但只有 L 轴相加的计算的性能。

0 投票
1 回答
855 浏览

python - Python张量积

我有以下问题。出于性能原因,我使用numpy.tensordot并因此将我的值存储在张量和向量中。我的一个计算如下所示:

在此处输入图像描述

<w_j>是 的期望值w_j<sigma_i>的期望值sigma_i。(也许我现在应该叫 is sigma,因为它与标准偏差无关)现在为了进一步计算,我还需要方差。要获得方差,我需要计算: 在此处输入图像描述

现在,当我用 python 实现第一个公式时,numpy.tensordot我真的很高兴,因为它非常抽象,而且我不习惯张量。代码看起来像这样:

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

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

向量有长度l,张量的维度是l * l * l。我希望我的问题是可以理解的,并在此先感谢您!

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

0 投票
1 回答
212 浏览

python - 平均张量积

我还有另一个与我的上一个问题(Python 张量积)有关的问题。在那里我发现我的计算有一个错误。使用 np.tensordot 我正在计算以下等式: 在此处输入图像描述 <..> 应该显示平均值。在 python 代码中它看起来像这样(ewp 是一个向量并且是一个张量):

或者

现在在我忽略的两个 python 代码中,所有的可能性都成倍增加。但当然w_jw_k不能独立于j=k. 在这种情况下,我们得到只有 j 和 k 相同< w_j*w_j*w_l*w_m> = <w_j>*<w_l>*<w_m>。因为j=k=l我们得到:< w_j*w_j*w_j*w_m> = <w_j>*<w_m>。对于j=k=l=m< w_j*w_j*w_j*w_j> = <w_j>。只有当所有变量都不同时,独立性才成立,我们得到:< w_i*w_j*w_l*w_m> = <w_i>*<w_j>*<w_l>*<w_m>。现在这就是代码为所有可能性所做的事情。我希望这使我的问题可以理解。现在我的问题是如何在我的代码中表示这一点?

编辑:我的一个想法是首先创建一个 4dim。代表的张量<w_j w_k w_l w_m>

然后我需要更改不依赖的值。我认为它们应该在对角线上?但是我对张量演算真的不太了解,所以在这一点上我很挣扎。操纵 w 张量后,我将通过执行以下操作获得结果:

Edit2:在另一篇文章中,我准确地询问了如何操作 4dim 以使其适合此处。Divakar 有一个非常好的解决方案,可以在这里看到:Fill a multidimensional array Effectively that have many if else statements

我在这里得到的数组是wtensor我现在可以在上面的代码中使用的:

这最终给了我想要的结果,并且基本上回答了这个问题。虽然有一个问题。然后定义张量大小的 ewp 的长度不应大于 6。否则代码将使用大量内存。我的意图是使用它直到大小为 8,所以不幸的是,现在这是我的下一个问题。

0 投票
0 回答
352 浏览

python - 张量流中的张量乘法(轴数不确定)

我有一个a轴数未知(但至少有一个)的张量和一个方阵M,使得a.get_shape()[0] == M.get_shape()[0]==M.get_shape()[1].

我想做的是

但与 numpy 不同的是einsumeinsum最近在 tensorflow 版本 11 中实现的 tensorflow 确实支持 using ...,所以如果我知道例如a排名为 4的问题,那么我可以解决我的问题

a但是,当等级未知时我该怎么办?是否有某种有效的解决方法?

0 投票
1 回答
249 浏览

python - 如何在 theano 中使用 batch_tensordot,如 numpy.einsum

我有一个形状为 (3, 4, 5) 的 tensor3 和另一个形状为 (3, 4, 7, 5) 的 tensor4。在 numpy 中,

但在 theano 中,该怎么做。