问题标签 [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 - 简化双 einsum
我试图用来numpy.einsum
简化我的代码中的循环。
目前,我的代码如下所示:
我正在尝试numpy.einsum
用作此循环的替代方案:
是否可以使用一个numpy.einsum
而不是两个?
python - 用于两个 3dim 矩阵的 numpy einsum 的 Theano 版本
我有两个 3dim numpy 矩阵,我想根据一个轴做一个点积,而不在 theano 中使用循环。带有示例数据的 numpy 解决方案如下:
其中“a”的形状为 (7, 4, 15),“b”的形状为 (7, 4, 5)。“c”,定义为“a”和“b”的点积:
我正在寻找此示例的 theano 实现来计算“c”。
有任何想法吗?
python - 在numpy中乘以包含图像的张量
我有以下三阶张量。两个张量矩阵第一个张量包含 100 个 10x9 矩阵,第二个包含 100 个 3x10 矩阵(我刚刚在这个例子中填充了这些矩阵)。
我的目标是将矩阵乘以一对一的对应关系,这将产生一个具有形状的张量: (100, 3, 9)
这可以通过一个 for 循环来完成,该循环只压缩两个张量,然后取每个张量的点,但我正在寻找只需使用 numpy 运算符即可。到目前为止,这里有一些失败的尝试
尝试1:
尝试 1 的输出:
(100, 3, 100, 9)
这意味着它尝试了所有可能的组合......这不是我所追求的。
实际上没有其他尝试甚至编译。我尝试使用 np.tensordot , np.einsum (在这里阅读https://jameshensman.wordpress.com/2010/06/14/multiple-matrix-multiplication-in-numpy它应该可以完成这项工作,但我没有得到正确的爱因斯坦指数)同样在同一个链接中,还有一些我无法想象的疯狂张量立方体重塑方法。关于如何解决这个问题的任何建议/想法解释?
python - 在没有显式复制的情况下使用 einsum
我有一个形状为 (n, n) 的矩阵 A 和另一个形状为 (p, n) 的矩阵 b。我需要得到一个矩阵 C 使得
我目前正在通过执行 np.matlib.repmat(A) 然后使用 np.einsum 来做到这一点,如下所示
但我可以看到创建 A1 是一种资源浪费,因为它只是一遍又一遍地使用相同的值。无论如何我可以在不创建中间矩阵 A1 的情况下做到这一点吗?
python - 与 fortran 或 C 相比,numpy.einsum 高效吗?
我写了一个非常耗时的 numpy 程序。剖析之后,我发现大部分时间都花在了numpy.einsum
.
虽然 numpy 是 LAPACK 或 BLAS 的包装器,但我不知道numpy.einsum
它的性能是否与 LAPACK 或 BLAS 中的对应物相媲美。
那么,如果我切换到 fortran 或 C,我会得到很大的性能提升吗?
python - 在 einsum 中对多个向量的外积求和
我在非编码环境中对爱因斯坦求和的经验为零,尽管我试图通过一些互联网研究来解决这个问题(会提供链接,但还没有超过两个的声誉)。我还尝试使用 einsum 在 python 中进行实验,看看是否可以更好地处理事情。
然而,我仍然不清楚这样做是否既可行又有效:
在长度 (3) 和高度 (n) 相等的数组 (a 和 b) 的两个数组上,逐行产生 (row i: a on b) 的外积加上 (row i: b on a ),然后将所有外部乘积矩阵相加以输出一个最终矩阵。
我知道 'i,j->ij' 会产生一个向量对另一个向量的外积——这是让我失去兴趣的下一步。('ijk,jik->ij' 绝对不是)
我的另一个可用选项是遍历数组并从我用 cython 编写的函数调用基本函数(双外积和矩阵加法)(使用内置的 numpy 外部和 sum 函数不是一个选项,它太慢了)。我很可能最终也会将循环本身移动到 cython。
所以:
我怎样才能概括地表达我上面描述的过程?
它会比在 cython 中做所有事情提供真正的收益吗?还是有其他我不知道的选择?(包括我使用 numpy 的效率低于我可能的可能性......)
谢谢。
编辑示例:
(但是请注意,实际上我们正在处理长度更大的数组(即每个内部成员的长度仍然为 3,但最多有几千个这样的成员),并且这部分代码(不可避免地)被调用了很多次)
如果它有帮助,这里是两个外部产品相加的cython:
现在,我从“i in range(len(array))”循环中调用,如上所示。
numpy - 使用 np.einsum 和 np.tensordot 执行 4 阶张量的坐标变换
方程是
我能够使用
做这份工作,也期待
工作,但事实并非如此。
规格:
C 是一个四阶弹性张量:
Q 是一个改变 x 和 y 坐标的旋转矩阵。
Q_inv 是
np.einsum
导致
我认为这是正确的,而四个np.tensordot
导致
注意负的大数字。
python - 仅使用 NumPy einsum 处理上三角元素
我正在使用 numpy einsum 来计算形状为 (3,N) 的列向量 pts 数组与其自身的点积,从而得到一个形状为 (N,N) 的矩阵点积与所有点积。这是我使用的代码:
这可行,但我只需要主对角线以上的值。IE。结果的上三角部分没有对角线。是否可以使用 einsum 仅计算这些值?或者以比使用 einsum 计算整个矩阵更快的任何其他方式?
我的 pts 数组可能非常大,所以如果我只能计算我需要的值,那么我的计算速度就会加倍。
python - 是否可以使用 einsum 转置所有内容?
好的,我知道如何转置矩阵,例如:
对于一维数组,不可能使用这个“.T”工具(老实说,我不知道为什么)所以要转置一个向量,你必须改变范式并使用,例如:
并且因为B.T
会给出相同的结果,所以我们应用这种范式变化,使用:
而且我发现这种范式变化有点反感,因为一维向量与二维向量(矩阵)绝不是不同的实体,从数学上讲它们来自同一个家庭并共享许多事物。
我的问题是:是否有可能用 numpy 皇冠上的宝石(有时称为)einsum 进行这种换位,以更紧凑和统一的方式用于每种张量?我知道你做的矩阵
你会得到,就像以前一样A.T
:
是否可以使用一维数组来做到这一点?
先感谢您。
python - Numpy einsum 广播
有人可以解释一下广播(省略号)如何在 numpy.einsum() 函数中工作吗?
一些示例来说明如何以及何时可以使用它将不胜感激。
我检查了以下官方文档页面,但只有 2 个示例,我似乎无法理解如何解释和使用它。
http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.einsum.html