问题标签 [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.
python - 我可以在 `numpy.einsum` 中使用超过 26 个字母吗?
我np.einsum
用来乘以概率表,例如:
问题是我正在处理超过 26 个随机变量(轴),所以如果我为每个随机变量分配一个字母,我的字母就会用完。有没有另一种方法可以指定上述操作来避免这个问题,而无需使用混乱的np.sum
操作np.dot
?
python - 在二维数组上矢量化 NumPy 三重乘积
我正在尝试在下面N x N
调用的数组上对以下三重乘积运算进行矢量化p
:
我认为numpy.einsum
应该在这里使用,尽管我实际上并没有对重复的索引进行求和,但我无法确定它。想法?
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')
任何提示都会很棒!谢谢。
根据要求的示例代码:
python - 与 einsum 的交叉产品
我正在尝试尽快计算许多 3x1 向量对的叉积。这个
给出了正确的答案,但出于对类似问题的回答的动机,我认为这einsum
会让我有所收获。我发现两者
计算叉积,但它们的性能令人失望:两种方法的性能都比np.cross
:
关于如何改进einsum
s 的任何想法?
numpy - 在多维数组产品中,如何对齐有和没有求和的轴?
当有一些重复的索引相加而其他索引不相加时,执行数组操作的最佳方法是什么?似乎我可能不得不使用这些操作,但如果有一个带有标志的替代方案,用于对齐但未求和的尺寸, einsum
那会更好。tensordot
有没有人知道一个快速的数值例程(也许在 lapack 中?),它的行为类似于 tensordot,除了某些轴可以对齐而不被求和?
==
这是一个示例代码,用于显示所需的数组操作类型。我需要的操作是由method_sum
、method_einsum
和完成的method_matmul
。类似的运算在匹配的 j 轴上求和,由method2_einsum
和完成method2_tensordot
。
通过比较时间,似乎tensordot
应该能够einsum
解决第一个问题。但是,它没有在不汇总轴的情况下对齐轴的功能。
以下是我电脑上各种例程的一些时间。Tensordot 可以击败 einsum,method2
因为它使用多个内核。我想实现类似于tensordot
J 轴和 L 轴对齐但只有 L 轴相加的计算的性能。
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)
python - 平均张量积
我还有另一个与我的上一个问题(Python 张量积)有关的问题。在那里我发现我的计算有一个错误。使用 np.tensordot 我正在计算以下等式: <..> 应该显示平均值。在 python 代码中它看起来像这样(ewp 是一个向量并且是一个张量):
或者
现在在我忽略的两个 python 代码中,所有的可能性都成倍增加。但当然w_j
并w_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,所以不幸的是,现在这是我的下一个问题。
python - 张量流中的张量乘法(轴数不确定)
我有一个a
轴数未知(但至少有一个)的张量和一个方阵M
,使得a.get_shape()[0] == M.get_shape()[0]==M.get_shape()[1]
.
我想做的是
但与 numpy 不同的是einsum
,einsum
最近在 tensorflow 版本 11 中实现的 tensorflow 确实支持 using ...
,所以如果我知道例如a
排名为 4的问题,那么我可以解决我的问题
a
但是,当等级未知时我该怎么办?是否有某种有效的解决方法?
python - 如何在 theano 中使用 batch_tensordot,如 numpy.einsum
我有一个形状为 (3, 4, 5) 的 tensor3 和另一个形状为 (3, 4, 7, 5) 的 tensor4。在 numpy 中,
但在 theano 中,该怎么做。