问题标签 [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 中的省略号广播
我无法理解为什么以下内容不起作用:
我有一个可以是三维或六维的数组前置因子。我有一个具有四个维度的偶极子阵列。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上提出了同样的问题,但还没有令人满意的答案。
python - 了解 NumPy 的 einsum
我正在努力理解究竟是如何einsum
工作的。我查看了文档和一些示例,但似乎并没有坚持下去。
这是我们在课堂上学习的一个例子:
对于两个数组:A
和B
.
我认为这需要A^T * B
,但我不确定(它正在对其中一个进行转置,对吗?)。谁能告诉我这里发生了什么(以及一般使用时einsum
)?
python - numpy einsum 以获得轴排列
我在“np.einsum”的文档中理解的是,一个排列字符串会给出一个向量中轴的排列。以下实验证实了这一点:
但这我无法理解:
我希望 (4, 2, 3) 改为......我的理解有什么问题?
python - 使用 einsum 拆分矩阵乘法
我有一个大数据矩阵,我想计算该大矩阵的相似度矩阵,但由于内存限制,我想拆分计算。
假设我有以下内容:例如,我采用了一个较小的矩阵
他们我尝试执行以下操作:
n1,n2,m1,m2 计算如下:(df 是一个数据框)
但错误是:
python - 如何使用numpy的einsum取子数组的点积?
我有一个带有 3 个轴的数组:
而且我想使用 einsum 以非迭代方式将“a”中每个向量的点积与矩阵相乘:
像这样
得到一个与初始数组“a”形状相同的数组。我一直在尝试使用 einsum,但我无法让它工作。
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。
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.
python-3.x - 如何计算 numpy 中的所有矢量差异对?
我知道我能做到np.subtract.outer(x, x)
。如果x
有 shape (n,)
,那么我最终会得到一个 shape 的数组(n, n)
。但是,我有一个x
with shape (n, 3)
。我想用 shape 输出一些东西(n, n, 3)
。我该怎么做呢?也许np.einsum
?
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)
不一样?