Умножение двухмерного массива на каждый кусочек трехмерного массива - Numpy - PullRequest
0 голосов
/ 11 октября 2018

Я ищу оптимизированный способ вычисления поэлементного умножения 2-мерного массива на каждый фрагмент 3-го массива (используя numpy).

, например:

w = np.array([[1,5], [4,9], [12,15]]) y = np.ones((3,2,3))

Я хочу получить результат в виде трехмерного массива той же формы, что и y.

Вещание с использованием оператора * запрещено.В моем случае третье измерение очень длинное, а цикл for неудобен.

1 Ответ

0 голосов
/ 11 октября 2018

Для заданных массивов

import numpy as np

w = np.array([[1,5], [4,9], [12,15]])

print(w)

[[ 1  5]
 [ 4  9]
 [12 15]]

и

y = np.ones((3,2,3))

print(y)

[[[ 1.  1.  1.]
  [ 1.  1.  1.]]

 [[ 1.  1.  1.]
  [ 1.  1.  1.]]

 [[ 1.  1.  1.]
  [ 1.  1.  1.]]]

Мы можем умножить массивы напрямую,

z = ( y.transpose() * w.transpose() ).transpose()

print(z)

[[[  1.   1.   1.]
  [  5.   5.   5.]]

 [[  4.   4.   4.]
  [  9.   9.   9.]]

 [[ 12.  12.  12.]
  [ 15.  15.  15.]]]

Можно отметить, что это дает тот же результат, что иnp.einsum ('ij, ijk-> ijk', w, y), возможно, с чуть меньшими усилиями и накладными расходами.

...