В numpy функцию numpy.dot()
можно использовать для вычисления матричного произведения двух 2D-массивов. У меня есть два трехмерных массива X и Y (скажем), и я хотел бы вычислить матрицу Z, где Z[i] == numpy.dot(X[i], Y[i])
для всех i
. Возможно ли это сделать неитеративно?
найти точечный продукт подмассивов в numpy
comment
По какой оси / осям вы хотите сделать продукт? Для случая, когда X и Y оба были 3x3, каков размер Z?
- person talonmies   schedule 10.06.2011
comment
@talonmies Если два трехмерных массива равны K x L x M и K x M x N, результат должен быть K x L x N.
- person Ben Kirwin   schedule 11.06.2011
Ответы (1)
Как насчет:
from numpy.core.umath_tests import inner1d
Z = inner1d(X,Y)
Например:
X = np.random.normal(size=(10,5))
Y = np.random.normal(size=(10,5))
Z1 = inner1d(X,Y)
Z2 = [np.dot(X[k],Y[k]) for k in range(10)]
print np.allclose(Z1,Z2)
возвращает True
Изменить Исправление, поскольку я не видел трехмерную часть вопроса.
from numpy.core.umath_tests import matrix_multiply
X = np.random.normal(size=(10,5,3))
Y = np.random.normal(size=(10,3,5))
Z1 = matrix_multiply(X,Y)
Z2 = np.array([np.dot(X[k],Y[k]) for k in range(10)])
np.allclose(Z1,Z2) # <== returns True
Это работает, потому что (как указано в строке документации) matrix_multiply
обеспечивает
matrix_multiply(x1, x2[, out]) матрица
умножение на последние два измерения
person
JoshAdel
schedule
10.06.2011
Как написано, я не думаю, что это работает, если X и Y являются 3D.
- person DSM; 10.06.2011
@DSM - да, изначально пропустил это. Теперь у меня есть исправленное решение.
- person JoshAdel; 10.06.2011
Исправленная версия выглядит хорошо... спасибо! Извините, если мой первоначальный вопрос не был ясен.
- person Ben Kirwin; 11.06.2011
@hass: твой вопрос был понятен, я просто пропустил его, когда читал в первый раз. Рад, что смог быть полезен.
- person JoshAdel; 12.06.2011