2014-09-19 3 views
1

2x2 행렬 x의 원소에 2x2 행렬 인 행렬 y를 곱해야합니다. 기존의 numpy 곱셈을 사용하면 전체 행렬 x를 취해 y의 각 행렬에 곱합니다. 나는 수치스러운 의사를 찾고 있었다. 뭔가 즉,이 복제됩니다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와의 의견에서 @DSM 실제로 당신이 원하는 것 같다? – Dalek

+0

행렬 x의 각 요소에 y와 대응하는 행렬이있는 스칼라 인 것처럼 곱하면 어떻게됩니까? 기본적으로 나는 예제 코드에서 제공 한 multiply 함수를 복제 할 무언가가 필요하다. – user2909415

+0

@ user2909415'np.tensordot (x, y, axes = [[0, 1], [0, 1]])'을 찾고있는 것 같지만 질문이 확실하지 않습니다 ... 예상되는 결과는 무엇입니까? –

답변

3

편집 :

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

나는'2x2' 행렬 인'y' 행렬의 각 요소에서'x' 행렬의 각 요소를 곱하는 방법을 찾고 있다고 생각합니다. 요청 된 응답의 예가 질문에 주어져 있습니다. – Dalek

+2

IIUC OP가 찾고있는 것의 einsum 버전은'np.einsum ('ij, ijkl-> ijkl', x, y)'입니다. 나는 아직 커피를 마시지 않았다. – DSM

+0

@Dalek 의견에 감사드립니다! –

관련 문제