问题标签 [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.
tensorflow - 张量流中张量链相乘的有效方法是什么
我有 3 个维度为 A = P*N、B = Q*N 和 C = R*N 的稀疏张量。计算乘积矩阵 A*B*C 使得乘积矩阵的维度在张量流中为 P*Q*R 的有效方法是什么?
我已经尝试使用 tf.matmul 并随后使用 tf.reshape 但它不会给出具有上述尺寸的产品矩阵。
谢谢。
python - python中的高效张量收缩
我有一个L
张量(ndarray
对象)列表,每个都有几个索引。我需要根据连接图收缩这些指数。
连接被编码在一个元组列表中,其形式((m,i),(n,j))
表示“将张量的第i个索引与张量L[m]
的第j个索引收缩L[n]
。
如何处理非平凡的连接图?第一个问题是,一旦我收缩了一对索引,结果就是一个不属于 list 的新张量L
。但即使我解决了这个问题(例如,通过为所有张量的所有索引提供唯一标识符),也存在一个问题,即可以选择任何顺序来执行收缩,并且某些选择会在中间计算中产生不必要的巨大野兽(即使最终结果很小)。建议?
python - numpy:通过广播摆脱 for 循环
我正在尝试在 python 中实现高斯混合模型的期望最大化算法。
给定高斯分布的平均mu和协方差sigma ,我有以下行来计算我的数据X的高斯概率p:
我想知道我是否可以以某种方式摆脱 for 循环以获得类似的东西
我对广播进行了一些研究,并正在考虑使用该numpy.einsum
功能,但无法弄清楚在这种情况下它将如何工作。
python - 如何从 np.tensordot 到 np.einsum
我得到的代码中的内容类似于:
A 是 a(20L, 50L)
和 B 是(20L, 20L)
我应该改变,因为有人告诉我它会更快np.einsum
,但我想我不完全理解tensordot
输出的是什么。
现在 C 是 a(20L, 50L)
我不明白为什么?
当然我已经阅读了文档页面,但仍然没有掌握信息。考虑到我刚刚开始使用 Python。
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?
python - 4d 数组处理(使用 einsum?)
我有一个基于矩阵的问题,我认为可以使用 numpy(也许是 einsum?)在一行代码中解决(计算成本低),但无法解决。
我想知道是否有人可以提出任何建议?问题如下:
举个例子:
如果有帮助,A 相对稀疏(可能包含 < 20 个非零项 - 但这些可能位于任何随机位置)。
编辑:添加循环
我可以使用嵌套循环来实现这一点,但这似乎是一个糟糕的解决方案:
我已经尝试了许多排列einsum
,我认为这可能能够解决这个问题。例如形式np.einsum('ijkl,mi->mi')
,但不知何故包括所有 ijkl 的总和,如上所述。
希望这是有道理的,并且任何指针(或使用 einsum / 其他数组处理路线的进一步建议)都会非常高兴。
python - tensorflow einsum vs. matmul vs. tensordot
在 tensorflow 中,函数tf.einsum
、tf.matmul
和tf.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)
任何一般都比其他人更可取吗?
numpy - 用更快的 3D 矩阵运算替换顺序积和求和
在我当前的 theano 脚本中,瓶颈是以下代码:
我曾在 2D 案例中看到,用点积替换 elementwise+sum 给了我 5 倍的加速。在这种情况下,是否有任何矩阵运算可以帮助我?
编辑:
Divakar给了我一个基于einsum的版本。但是,我的意图是将其移植到theano并且einsum在theano上不受支持。因此,欢迎使用可移植到theano的替代方案。
python - numpy.einsum 'ij,kl->ik' 如何通过 numpy.tensordot 做到这一点
我有两个矩阵,5x4 和 3x2。我想从他们那里得到一个 5x3 矩阵。
我可以这样做
但我不知道如何通过 numpy.tensordot 做到这一点我试过这个
我收到一个错误
背后的数学是
为什么我需要迁移einsum
到tensordot
?
因为我正在使用作为后端加速计算的pymc3
包进行研究。theano
但是,theano.tensor
不支持einsum
,它只支持tensordot
,与 . 相同的语法np.tensordot
。
numpy - 设置(M x N x N)矩阵的对角线的快速方法?Einsum / n维填充对角线?
我正在尝试基于矩阵编写快速、优化的代码,并且最近发现了 einsum 作为实现显着加速的工具。
是否可以使用它来有效地设置多维数组的对角线,还是只能返回数据?
在我的问题中,我试图通过对每个方阵 (N x N) 矩阵中的列求和来设置方阵数组(形状:M x N x N)的对角线。
我当前的(缓慢的,基于循环的)解决方案是:
请问这可以改善吗?似乎 np.fill_diagonal 不接受非方阵(因此强制我的基于循环的解决方案)。也许 einsum 也可以在这里提供帮助?