问题标签 [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 回答
424 浏览

tensorflow - 张量流中张量链相乘的有效方法是什么

我有 3 个维度为 A = P*N、B = Q*N 和 C = R*N 的稀疏张量。计算乘积矩阵 A*B*C 使得乘积矩阵的维度在张量流中为 P*Q*R 的有效方法是什么?

我已经尝试使用 tf.matmul 并随后使用 tf.reshape 但它不会给出具有上述尺寸的产品矩阵。

谢谢。

0 投票
2 回答
2153 浏览

python - python中的高效张量收缩

我有一个L张量(ndarray对象)列表,每个都有几个索引。我需要根据连接图收缩这些指数。

连接被编码在一个元组列表中,其形式((m,i),(n,j))表示“将张量的第i个索引与张量L[m]的第j个索引收缩L[n]

如何处理非平凡的连接图?第一个问题是,一旦我收缩了一对索引,结果就是一个不属于 list 的新张量L。但即使我解决了这个问题(例如,通过为所有张量的所有索引提供唯一标识符),也存在一个问题,即可以选择任何顺序来执行收缩,并且某些选择会在中间计算中产生不必要的巨大野兽(即使最终结果很小)。建议?

0 投票
1 回答
145 浏览

python - numpy:通过广播摆脱 for 循环

我正在尝试在 python 中实现高斯混合模型的期望最大化算法。

给定高斯分布的平均mu和协方差sigma ,我有以下行来计算我的数据X的高斯概率p

我想知道我是否可以以某种方式摆脱 for 循环以获得类似的东西

我对广播进行了一些研究,并正在考虑使用该numpy.einsum功能,但无法弄清楚在这种情况下它将如何工作。

0 投票
1 回答
253 浏览

python - 如何从 np.tensordot 到 np.einsum

我得到的代码中的内容类似于:

A 是 a(20L, 50L)和 B 是(20L, 20L)

我应该改变,因为有人告诉我它会更快np.einsum,但我想我不完全理解tensordot输出的是什么。

现在 C 是 a(20L, 50L)我不明白为什么?

当然我已经阅读了文档页面,但仍然没有掌握信息。考虑到我刚刚开始使用 Python。

0 投票
1 回答
223 浏览

python - How do I do an einsum that mimics 'keepdims'?

a python question: I've got a np.einsum operation that I'm doing on a pair of 3d arrays:

Problem I'm having is the result is 2d; the operation collapses the 'j' dimension. What I'd love to do is to have it retain the 'j' dimension similar to how 'keepdims' works in the np.sum function.

I can wrap the result in np.expand_dims, but that seems inefficient to me. I'd prefer to find some way to tweak the einsum to output what I'm after.

Is this posible?

0 投票
0 回答
277 浏览

python - 4d 数组处理(使用 einsum?)

我有一个基于矩阵的问题,我认为可以使用 numpy(也许是 einsum?)在一行代码中解决(计算成本低),但无法解决。

我想知道是否有人可以提出任何建议?问题如下:

举个例子:

如果有帮助,A 相对稀疏(可能包含 < 20 个非零项 - 但这些可能位于任何随机位置)。

编辑:添加循环

我可以使用嵌套循环来实现这一点,但这似乎是一个糟糕的解决方案:

我已经尝试了许多排列einsum,我认为这可能能够解决这个问题。例如形式np.einsum('ijkl,mi->mi'),但不知何故包括所有 ijkl 的总和,如上所述。

希望这是有道理的,并且任何指针(或使用 einsum / 其他数组处理路线的进一步建议)都会非常高兴。

0 投票
1 回答
13288 浏览

python - tensorflow einsum vs. matmul vs. tensordot

在 tensorflow 中,函数tf.einsumtf.matmultf.tensordot都可以用于相同的任务。(我意识到这一点tf.einsum并且tf.tensordot有更一般的定义;我也意识到它tf.matmul具有批处理功能。)在可以使用这三个中的任何一个的情况下,一个函数往往是最快的吗?还有其他推荐规则吗?

例如,假设A是一个 rank-2 张量,并且b是 rank-1 张量,并且您想要计算 product c_j = A_ij b_j。在三个选项中:

c = tf.einsum('ij,j->i', A, b)

c = tf.matmul(A, tf.expand_dims(b,1))

c = tf.tensordot(A, b, 1)

任何一般都比其他人更可取吗?

0 投票
1 回答
271 浏览

numpy - 用更快的 3D 矩阵运算替换顺序积和求和

在我当前的 theano 脚本中,瓶颈是以下代码:

我曾在 2D 案例中看到,用点积替换 elementwise+sum 给了我 5 倍的加速。在这种情况下,是否有任何矩阵运算可以帮助我?

编辑

Divakar给了我一个基于einsum的版本。但是,我的意图是将其移植到theano并且einsum在theano上不受支持。因此,欢迎使用可移植到theano的替代方案。

0 投票
1 回答
137 浏览

python - numpy.einsum 'ij,kl->ik' 如何通过 numpy.tensordot 做到这一点

我有两个矩阵,5x4 和 3x2。我想从他们那里得到一个 5x3 矩阵。

我可以这样做

但我不知道如何通过 numpy.tensordot 做到这一点我试过这个

我收到一个错误

背后的数学是

为什么我需要迁移einsumtensordot?

因为我正在使用作为后端加速计算的pymc3包进行研究。theano

但是,theano.tensor不支持einsum,它只支持tensordot,与 . 相同的语法np.tensordot

0 投票
2 回答
474 浏览

numpy - 设置(M x N x N)矩阵的对角线的快速方法?Einsum / n维填充对角线?

我正在尝试基于矩阵编写快速、优化的代码,并且最近发现了 einsum 作为实现显着加速的工具。

是否可以使用它来有效地设置多维数组的对角线,还是只能返回数据?

在我的问题中,我试图通过对每个方阵 (N x N) 矩阵中的列求和来设置方阵数组(形状:M x N x N)的对角线。

我当前的(缓慢的,基于循环的)解决方案是:

请问这可以改善吗?似乎 np.fill_diagonal 不接受非方阵(因此强制我的基于循环的解决方案)。也许 einsum 也可以在这里提供帮助?