Рассмотрим D-мерный массив B (i_1, ..., i_D) размера (N_1 x ... x N_D) и двумерный массив O ^ d размера (N_d x N_d). Мне нужно вычислить что-то вроде
A (i_1, ..., i_d, ..., i_D) = sum_ {j_d = 1} ^ {N_d} O_ {i_d, j_d} B (i_1 ,. .., j_d, ... i_D)
наиболее эффективным способом, так как массивы A и B будут большими. Другими словами, это, по сути, продукт OB матричного умножения, где сжимается вдоль второго измерения O и d-го измерения B, но важно, чтобы индексы в конечном результате также были упорядочены как (i_1 ... i_D) а не (i_d i_1 ... i_D). Я сделал это с помощью последовательности транспозиций, но это не кажется особенно аккуратным или эффективным;Мне интересно, есть ли более элегантный / автоматический способ сделать то же самое.