Python – Numpy einsum广播

有人可以解释广播(省略号)如何在numpy.einsum()函数中工作?

将非常感谢一些示例来说明如何以及何时使用它.

我检查了以下官方文档页面,但只有2个例子,我似乎无法理解如何解释它并使用它.

http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.einsum.html

最佳答案
椭圆是一个粗略的缩写,代表“未明确提到的所有剩余轴”.例如,假设您有一个形状数组(2,3,4,5,6,6):

import numpy as np
arr = np.random.random((2,3,4,5,6,6))

你希望沿着最后两个轴追踪:

result = np.einsum('ijklmm->ijklm', arr)
result.shape
# (2, 3, 4, 5, 6)

一种等效的方法是

result2 = np.einsum('...mm->...m', arr)
assert np.allclose(result, result2)

省略号提供简写符号含义(在本例中)“和所有
向左的轴“….代表ijkl.

关于不必明确的一件好事是

np.einsum('...mm->...m', arr)

同样适用于任意数量维度> = 2的数组(只要最后两个具有相等的长度),而

np.einsum('ijklmm->ijklm', arr)

仅当arr正好有6个维度时才有效.

当椭圆出现在中间时,它是“所有中轴的简写”
没有明确提到“.例如,下面,np.einsum(‘ijklmi-> ijklm’,arr)
相当于np.einsum(‘i … i-> i …’,arr).这里…代表jklm:

arr = np.random.random((6,2,3,4,5,6))
result = np.einsum('ijklmi->ijklm', arr)
result2 = np.einsum('i...i->i...', arr)
assert np.allclose(result, result2)

转载注明原文:Python – Numpy einsum广播 - 代码日志