2014-09-19 4 views
1

Мне нужно умножить элементы матрицы a, скажем, 2x2, x, с матрицей y, элементами которой являются 2x2-матрицы. Когда я использую обычное умножение numpy, он принимает всю матрицу x и умножает ее на каждую матрицу по y. Я искал numpy doc. за то, что будет повторить это:Numpy: умножение матричных элементов с массивом матриц

>>> x = np.array([[1, 0], [0, 1]]) 
>>> x 
array([[1, 0], 
     [0, 1]]) 
>>> y = np.ones((2, 2, 2, 2)) 
>>> y 
array([[[[ 1., 1.], 
     [ 1., 1.]], 
    [[ 1., 1.], 
    [ 1., 1.]]], 
    [[[ 1., 1.], 
    [ 1., 1.]], 
    [[ 1., 1.], 
    [ 1., 1.]]]]) 
>>> multiply(x,y) 
[[[[1, 1], 
    [1, 1]], 
    [[0, 0], 
    [0, 0]]], 
[[[0, 0], 
    [0, 0]], 
    [[1, 1], 
    [1, 1]]]] 
+1

что именно ваш вопрос? – Dalek

+0

Как умножить каждый элемент матрицы x, как если бы он был скаляром с соответствующей матрицей по y. в основном мне нужно что-то, что будет реплицировать функцию умножения, которую я дал в примере кода. – user2909415

+0

@ user2909415 Кажется, вы ищете 'np.tensordot (x, y, axes = [[0, 1], [0, 1]])', но ваш вопрос неясно ... каков ожидаемый результат? –

ответ

3

EDIT: Из комментариев @Dalek и @DSM, кажется, что на самом деле то, что вы хотите:

np.einsum('ij, ijkl-> ijkl', x, y) 
+1

Я думаю, что он ищет способ умножить каждый элемент матрицы 'x' в каждом элементе матрицы' y', который является матрицей «2x2», в запросе указан пример запрошенного ответа. – Dalek

+2

IIUC версия einsum того, что ищет OP, это 'np.einsum ('ij, ijkl-> ijkl', x, y)'. Тем не менее, у меня еще не было моего кофе. – DSM

+0

@ Далек благодарю вас за отзыв! –

Смежные вопросы