2016-12-10 9 views
0

두 개의 행렬 A, B, NxKxD 차원을 가지고 있고 행렬 C, NxKxDxD 차원을 얻고 싶습니다. C [n, k] = A [n, k] x B [n, k] .T (여기서 "x"는 차원 Dx1과 1xD의 행렬의 결과를 의미하므로 결과는 DxD 차원이어야 함) 이제 다음과 같은 코드가 생성됩니다 (여기서는 A = B = X).다차원 행렬 (python, numpy)의 벡터 내적

def square(X): 
    out = np.zeros((N, K, D, D)) 
    for n in range(N): 
     for k in range(K): 
      out[n, k] = np.dot(X[n, k, :, np.newaxis], X[n, k, np.newaxis, :]) 
    return out 

큰 N과 K의 경우 파이썬이주기 때문에 느릴 수 있습니다. 이 곱셈을 하나의 방법으로 만들 수 있습니까 numpy의 기능이 있습니까?

답변

1

너는 np.dot을 합계 감소를 위해 사용하지 않고있는 것 같지만 방송을하게되는 확장을 위해서만. 따라서 배열을 np.newaxis/None을 사용하여 하나의 차원으로 확장하고 암시 적 브로드 캐스팅이 도움이되도록 할 수 있습니다.

따라서, 구현 될 것이다 - 새로운 축을 추가하는 방법을 구체적으로 방송에

X[...,None]*X[...,None,:] 

자세한 정보는 this other post에서 볼 수 있습니다.