Numpy einsum 广播
Numpy einsum broadcasting
谁能解释一下广播(省略号)在 numpy.einsum() 函数中的工作原理?
我们将不胜感激一些示例来说明如何以及何时可以使用它。
我查看了以下官方文档页面,但只有 2 个示例,我似乎无法理解如何解释和使用它。
http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.einsum.html
省略号是shorthand,大致代表"all the remaining axes not explicitly mentioned"。例如,假设您有一个形状为 (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)
省略号提供了一个 shorthand 符号含义(在本例中)“以及所有
轴向左”。...
代表 ijkl
。
不必明确表达的一个好处是
np.einsum('...mm->...m', arr)
同样适用于任意维度 >= 2 的数组(只要最后两个维度的长度相等),而
np.einsum('ijklmm->ijklm', arr)
仅当 arr
恰好有 6 个维度时有效。
当椭圆出现在中间时,shorthand表示“所有的中间轴
未明确提及”。例如,下面,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)
谁能解释一下广播(省略号)在 numpy.einsum() 函数中的工作原理?
我们将不胜感激一些示例来说明如何以及何时可以使用它。
我查看了以下官方文档页面,但只有 2 个示例,我似乎无法理解如何解释和使用它。
http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.einsum.html
省略号是shorthand,大致代表"all the remaining axes not explicitly mentioned"。例如,假设您有一个形状为 (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)
省略号提供了一个 shorthand 符号含义(在本例中)“以及所有
轴向左”。...
代表 ijkl
。
不必明确表达的一个好处是
np.einsum('...mm->...m', arr)
同样适用于任意维度 >= 2 的数组(只要最后两个维度的长度相等),而
np.einsum('ijklmm->ijklm', arr)
仅当 arr
恰好有 6 个维度时有效。
当椭圆出现在中间时,shorthand表示“所有的中间轴
未明确提及”。例如,下面,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)