问题标签 [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 表现不佳。需要注意什么?
当 numpy einsum 抛出错误时通常会失败:
numpy 数组diff
是从两个 pandas 数据帧的减法中产生的,并且只包含类型的数字np.float32
——没有字符串、nan、+/-inf 或任何其他此类有趣的业务。那么我应该寻找什么?在什么情况下 einsum 通常会以这种方式失败?
这就是我加载和处理数据框的方式:
请原谅这个问题的开放性。感谢Divakar向我介绍了 einsum 魔法。
编辑:
这是我以表格形式包含实际数据的尝试:
python - 在 tf.einsum 中使用超过 26 个索引?
是否可以使用超过 26 个小写字母作为索引tf.einsum
?
Numpy 也允许使用大写字母,即np.einsum('zA,AB->zB',M1,M2)
whiletf.einsum
返回错误。
这对于收缩张量网络非常有用。
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))
的评论,可以解决问题。
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
提供了预期的实际爱因斯坦总和。
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 在两种情况下都没有给出相同的结果?
python - 向量化 numpy.einsum
我有以下四个张量
- H (h, r)
- A (a, r)
- D (d, r)
- T (a, t, r)
对于每一个i
in a
,都有一个对应T[i]
的shape (t, r)
。
我需要做一个np.einsum
来产生以下结果(pred
):
但是,我想在不使用 for 循环的情况下进行此计算。原因是我正在使用autograd
它目前不适用于项目分配!
python - 使用 numpy einsum 计算矩阵的列向量的内积
假设我有一个像这样的 numpy 矩阵:
我想计算每列与自身的内积,所以结果是:
我想知道这是否可以使用该einsum
功能(并更好地理解它)。
到目前为止,我能得到的最接近的结果是:
对角线包含预期结果,但我想知道是否可以避免边缘计算。
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
numpy - einsum 如何与 numpy 广播交互?
考虑具有(3,3) 或 (1,3) 的ndarraysx0=np.ones((3,3))
和。我想要一个计算这两个数组行的点积的单个 einsum 命令;在这种情况下,我想在 的第一个维度上进行广播。我试过
了,但这给了y0
y0.shape
y0.shape
(1,3)
y0
np.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 调用没有按我预期的那样运行。
python - 使用 einsum 的张量的元素外积
我有以下两个数组:
和
在哪里
我想找到 和的elementwise outer product
每三分之一。换句话说, foo 在被输入之前需要重新排列如下:foo
bar
np.outer
这是我所做的。
现在,当我这样做时,elmntwise_outer_prod(foo, bar)
它给了我想要的输出
问题有没有更好的方法来做到这一点?特别是np.einsum
,如果有的话,我怎样才能更有效地编写这个?我已经阅读了解决类似问题的先前问题,但我似乎无法理解这一点。我也读过这个博文 RE np.einsum
。
有什么帮助吗?