Python Numpy einsum klij->kijl 和 kijl->klij 它们是什么意思?

Python Numpy einsum klij->kijl and kijl->klij what do they mean?

我试图从 https://github.com/rezazad68/BCDU-Net/blob/master/Retina%20Blood%20Vessel%20Segmentation/evaluate.py 中理解以下代码:

patches_imgs_test = np.einsum('klij->kijl', patches_imgs_test)

以及以下内容:

predictions = np.einsum('kijl->klij', predictions)

我尝试查找 einsum 操作数 klij->kijlkijl->klij 但幸运女神尚未站在我这边。我得到的最接近的(可能)是以下不解释带有“4个字符”的案例:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html Understanding NumPy's einsum

我的直觉是它只是根据角色的移动方式旋转图像。我对此是否正确或接近?一些见解将不胜感激!

P.S。 numpy einsum 文档让我很生气..

提供的 einsum 语句等同于(使用 np.moveaxis):

 patches_imgs_test  = np.moveaxis(patches_imgs_test, 1, -1)

其次是:

predictions = np.moveaxis(predictions, -1, 1)

基本上,将第二个轴移动到最后,然后将其放回结果中。

在这种情况下,它是将图片块转储到神经网络中。第二和第四轴是实际的补丁,因此代码在传递给 NN 之前将它们放在末尾,而第一和第三轴是位置数据。