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

python - numpy.einsum 中的省略号广播

我无法理解为什么以下内容不起作用:

我有一个可以是三维或六维的数组前置因子。我有一个具有四个维度的偶极子阵列。dipoles 的前三个维度与 prefactor三个维度匹配。

由于我不知道prefactor的形状,我使用省略号来说明prefactor中的三个可选维度:

(在这里的例子中,prefactor.shape 是 (1, 1, 1, 160, 160, 128) 和 dipoles.shape 是 (160, 160, 128, 3)。执行时,我得到错误:

操作数 1 没有足够的维度来匹配广播,并且无法扩展,因为在开始和结束时都指定了爱因斯坦和下标

但是,当我在第二项中添加省略号时,它确实有效:

只是我不明白为什么,因为那里不需要省略号。有人知道这里发生了什么吗?

在http://comments.gmane.org/gmane.comp.python.numeric.general/53705上提出了同样的问题,但还没有令人满意的答案。

0 投票
8 回答
106370 浏览

python - 了解 NumPy 的 einsum

我正在努力理解究竟是如何einsum工作的。我查看了文档和一些示例,但似乎并没有坚持下去。

这是我们在课堂上学习的一个例子:

对于两个数组:AB.

我认为这需要A^T * B,但我不确定(它正在对其中一个进行转置,对吗?)。谁能告诉我这里发生了什么(以及一般使用时einsum)?

0 投票
1 回答
621 浏览

python - numpy einsum 以获得轴排列

我在“np.einsum”的文档中理解的是,一个排列字符串会给出一个向量中轴的排列。以下实验证实了这一点:

但这我无法理解:

我希望 (4, 2, 3) 改为......我的理解有什么问题?

0 投票
1 回答
129 浏览

python - 使用 einsum 拆分矩阵乘法

我有一个大数据矩阵,我想计算该大矩阵的相似度矩阵,但由于内存限制,我想拆分计算。

假设我有以下内容:例如,我采用了一个较小的矩阵

他们我尝试执行以下操作:

n1,n2,m1,m2 计算如下:(df 是一个数据框)

但错误是:

0 投票
1 回答
1464 浏览

python - 如何使用numpy的einsum取子数组的点积?

我有一个带有 3 个轴的数组:

而且我想使用 einsum 以非迭代方式将“a”中每个向量的点积与矩阵相乘:

像这样

得到一个与初始数组“a”形状相同的数组。我一直在尝试使用 einsum,但我无法让它工作。

0 投票
1 回答
601 浏览

python - 架构如何影响 numpy 数组操作性能?

我有 Ubuntu 14.04 和安装了英特尔的数学内核库 (MKL) 的“Anaconda”Python 发行版。我的处理器是具有 8 个内核且没有超线程(因此只有 8 个线程)的 Intel Xeon。

对我来说,numpytensordot始终优于einsum大型数组。然而,其他人发现两者之间的差异很小,甚至einsum 在某些操作中可能优于 numpy

对于使用numpy快速库构建的发行版的人,我想知道为什么会发生这种情况。MKL 在非英特尔处理器上运行是否更慢?还是einsum在具有更好线程能力的更现代的英特尔处理器上运行得更快?

这是一个快速示例代码,用于比较我的机器上的性能:

使用 tensordot 的张量运算始终在 5-20 GFLOP 范围内运行。我用 einsum 只能得到 0.2 GFLOPS。

0 投票
1 回答
1538 浏览

python - Numpy einsum() for rotation of meshgrid

I have a set of 3d coordinates that was generated using meshgrid(). I want to be able to rotate these about the 3 axes.

I tried unraveling the meshgrid and doing a rotation on each point but the meshgrid is large and I run out of memory.

This question addresses this in 2d with einsum(), but I can't figure out the string format when extending it to 3d.

I have read several other pages about einsum() and its format string but haven't been able to figure it out.

EDIT:

I call my meshgrid axes X, Y, and Z, each is of shape (213, 48, 37). Also, the actual memory error came when I tried to put the results back into a meshgrid.

When I attempted to 'unravel' it to do point by point rotation I used the following function:

I looped over the result with the following:

After the rotation I will be using the points to interpolate onto.

0 投票
1 回答
966 浏览

numpy - 朱莉娅的numpy.einsum?(2)

来自这个问题,我想知道是否有可能进行更广义的 einsum。让我们假设,我有问题

或类似的东西,我如何在不遍历总和的情况下解决这个问题?

最诚挚的问候

0 投票
1 回答
1421 浏览

python-3.x - 如何计算 numpy 中的所有矢量差异对?

我知道我能做到np.subtract.outer(x, x)。如果x有 shape (n,),那么我最终会得到一个 shape 的数组(n, n)。但是,我有一个xwith shape (n, 3)。我想用 shape 输出一些东西(n, n, 3)。我该怎么做呢?也许np.einsum

0 投票
1 回答
205 浏览

python - 如何理解这个 np.einsum('kij',A) 的结果?

例如,

这仍然A没有问题。

但如果我这样做print np.einsum('kij', A)的形状是(3, 4, 2)。不应该(4, 2, 3)吗?

print np.einsum('cab', A)形状的结果也(4, 2, 3)没有问题。为什么print np.einsum('kij', A)不一样?