【发布时间】:2020-05-25 23:49:17
【问题描述】:
我正在尝试理解 np.einsum,但似乎没有与我的特定上下文相关的示例。在numpy docs、guide here、here 和 stackoverflow 答案here 中有很多很好的例子。
然而
没有类似我的问题的例子是np.einsum("ijij->ij", padded_matrix)
当我输出 padded_matrix 时得到的位置
>> padded_matrix
>> [[[[[1. 0. 0. 0.33333333 0. 0.33333333]]
[[0. 1. 0. 0. 0. 0. ]]
[[0. 0. 1. 0. 0. 0. ]]
[[0.33333333 0. 0. 1. 0. 0.33333333]]
[[0. 0. 0. 0. 1. 0. ]]
[[0.33333333 0. 0. 0.33333333 0. 1. ]]]]]
padded_matrix 的长度为 1,为 <class 'numpy.ndarray'>。不幸的是,复制填充矩阵的输出不起作用。在实际程序中,padded_matrix 是对一个函数的调用,该函数过于复杂,无法包含在此处,因此,我复制了它的输出。
结果是[[1. 1. 1. 1. 1. 1.]],但我无法弄清楚元素是如何相乘的,然后是哪个轴相加。
鉴于我没有提供有效的 MWE,如果有人能告诉我在给定的 padded_matrix 作为 <class 'numpy.ndarray'> 的上下文中“ijij->ij”应该做什么,我将不胜感激。
我最好的猜测是
np.einsum("ii->i,A") 查看矩阵 A 的对角线,这是否意味着在此用法中,i 由于所有填充而被ij 有效替换,因此np.einsum("ijij->ij",padded_matrix) 是二甘醇的视图?
【问题讨论】:
-
没有相乘,因为只有一个参数
padded_matrix。 -
@hpaulj 我刚刚将我的猜测添加到问题的底部,您是否同意看起来正在计算的是内部矩阵的对角线视图?
标签: python-3.x numpy array-broadcasting numpy-einsum