问题标签 [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 投票
1 回答
626 浏览

python - Numpy einsum 表现不佳。需要注意什么?

当 numpy einsum 抛出错误时通常会失败:

numpy 数组diff是从两个 pandas 数据帧的减法中产生的,并且只包含类型的数字np.float32——没有字符串、nan、+/-inf 或任何其他此类有趣的业务。那么我应该寻找什么?在什么情况下 einsum 通常会以这种方式失败?

这就是我加载和处理数据框的方式:

请原谅这个问题的开放性。感谢Divakar向我介绍了 einsum 魔法。

编辑:

这是我以表格形式包含实际数据的尝试:

0 投票
1 回答
320 浏览

python - 在 tf.einsum 中使用超过 26 个索引?

是否可以使用超过 26 个小写字母作为索引tf.einsum

Numpy 也允许使用大写字母,即np.einsum('zA,AB->zB',M1,M2)whiletf.einsum返回错误。

这对于收缩张量网络非常有用。

0 投票
2 回答
856 浏览

numpy - 点积之和

如何使用 1000 个不同的(8,16)权重矩阵将 8 个元素向量中的 100 个转换为 10 个 16 个元素向量?10 个输出向量中的每一个都是 100 个点积的总和:

Numpy 或 TensorFlow 中是否有用于此功能的功能?我在 Numpy 中查看了 dot、tensordot、einsum 和 matmul,但我仍然不确定哪个是正确的选择。

编辑:我刚刚意识到我实际上想在对点积求和之前产生一个中间结果:(100,8)x(10,100,8,16) -> (10,100,16)。

我猜这可以通过重塑(100,8)到(1,100,1,8)和(1000,8,16)到(10,100,8,16)来完成,np.einsum('ijkl,ijlm->ijm', A, B) 但我不确定它是否将正确广播 1 到 10。

根据@Divakarnp.einsum('jk,ijkl->ijl', V, W.reshape(10,100,8,16))的评论,可以解决问题。

0 投票
1 回答
1582 浏览

python - 关于 numpy.einsum() 的附加信息

我试图理解 numpy.einsum() 函数,但文档以及来自 stackoverflow的这个答案仍然给我留下了一些问题。

让我们取爱因斯坦和和答案中定义的矩阵。

因此,根据我对爱因斯坦和的理解,我将把这个函数翻译成等价于符号 (A_i*B_ij) 所以我会得到:

j = 1:A_1*B_11 + A_2*B_21 + A_3*B_31

j = 2:A_1*B_12 + A_2*B_22+ A_3*B_32

依此类推,直到 j = 4。这给出

j = 1 : 0 + 4 + 16

j = 2 : 0 + 5 + 18

根据我的理解,这将是爱因斯坦的总和。相反,该函数不执行总和,而是将单独的项存储在一个矩阵中,我们可以在其中发现 (A_i * B_ij) 的结果

这实际上是如何由函数控制的?我觉得这是由文档中提到的输出标签控制的:

也可以通过指定输出下标标签来控制输出。这指定了标签顺序,并允许在需要时禁止或强制求和

所以不知何故,我假设 put->i禁用内部总和的求和。但这究竟是如何工作的?这对我来说不是很清楚。Putting->j提供了预期的实际爱因斯坦总和。

0 投票
1 回答
168 浏览

python - 是什么通过交换 Eigen::Tensor 收缩中的张量导致不同的结果?

我正在开发一个依赖张量收缩的 C++ 库。我不会在此处发布完整的应用程序,但我已将其提炼为以下内容。

我们定义了一个玩具 rank-4 张量,它只不过是 (0, 1, ..., 15) 重新整形:

以及要与之收缩的 rank-2 张量,它只不过是 (1, 2, 3, 4) 重塑:

要在 Eigen 中收缩两个张量,我们必须指定一个收缩对。我们的目标是收缩张量的前两个指数,如T(ijkl)*A(ib)=M(bjkl). 以我目前对 Eigen 中张量模块的理解,我们将收缩对写为

但是,我认为应该可以使用完全相同的收缩对来执行收缩A(ib)*T(ijkl)=N(bjkl)。不幸的是,情况并非如此,并且元素M

而这些N

我使用 einsum 在 numpy 中测试了相同的玩具张量:

并且contraction1两者contraction2都是

这与A(ib)*T(ijkl)=N(bjkl)Eigen 中的情况一致。是什么导致 Eigen 在两种情况下都没有给出相同的结果?

0 投票
1 回答
128 浏览

python - 向量化 numpy.einsum

我有以下四个张量

  1. H (h, r)
  2. A (a, r)
  3. D (d, r)
  4. T (a, t, r)

对于每一个iin a,都有一个对应T[i]的shape (t, r)

我需要做一个np.einsum来产生以下结果(pred):

但是,我想在不使用 for 循环的情况下进行此计算。原因是我正在使用autograd它目前不适用于项目分配!

0 投票
2 回答
526 浏览

python - 使用 numpy einsum 计算矩阵的列向量的内积

假设我有一个像这样的 numpy 矩阵:

我想计算每列与自身的内积,所以结果是:

我想知道这是否可以使用该einsum功能(并更好地理解它)。

到目前为止,我能得到的最接近的结果是:

对角线包含预期结果,但我想知道是否可以避免边缘计算。

0 投票
1 回答
2155 浏览

python - Python Pandas SUMPRODUCT and L Matrix caluclation

i have to columns in a pandas dataframe format and want the output in the C D column as below

Here i am trying to code excel formula in a python way ,Can someone throw code for this

0 投票
0 回答
226 浏览

numpy - einsum 如何与 numpy 广播交互?

考虑具有(3,3) 或 (1,3) 的ndarraysx0=np.ones((3,3))和。我想要一个计算这两个数组行的点积的单个 einsum 命令;在这种情况下,我想在 的第一个维度上进行广播。我试过 了,但这给了y0y0.shapey0.shape(1,3)y0np.einsum('ij,ij->i',x0,y0)

ValueError: ("Size of label '%s' for operand %d does not match previous terms.", 'i', 1)

有没有办法在 einsum 中做到这一点?看来 einsum 与 numpy 广播的交互在此应用程序中有些限制:x0 + y0当 y0 的形状为 (1,3) 时广播第一个维度,但上面的 einsum 调用没有按我预期的那样运行。

0 投票
1 回答
257 浏览

python - 使用 einsum 的张量的元素外积

我有以下两个数组:

在哪里

我想找到 和的elementwise outer product每三分之一。换句话说, foo 在被输入之前需要重新排列如下:foobarnp.outer

这是我所做的。

现在,当我这样做时,elmntwise_outer_prod(foo, bar)它给了我想要的输出

问题有没有更好的方法来做到这一点?特别是np.einsum,如果有的话,我怎样才能更有效地编写这个?我已经阅读了解决类似问题的先前问题,但我似乎无法理解这一点。我也读过这个博文 RE np.einsum

有什么帮助吗?