2017-11-27 5 views
3

형상 각 행은 데이터 포인트가 I이 N의 페어의 내적을 계산하고자하는 것이다 (NXD)의 X 데이터 포인트, , 위 삼각형의 XX '매트릭스 주어진 Tensorflow (파이썬)에서

물론 내가 전체 XX '을 계산하고 그 위쪽 삼각형을 가져올 수 있지만, 내가 오프 대각선 요소 두 번를 계산하는 것을 의미 할 수있다. Tensorflow (python)에서 쌍을 한 번만 내부 제품을 계산하여이를 효율적으로 계산하는 방법은 무엇입니까?

+0

@greeness 미안하지만 나는 이해하지 못한다. X는 정사각형이 아닐 수 있습니다. 몇 가지 코드를 보여 주시겠습니까? – Sharpplus

+0

나는 틀렸다고 생각해. 나는 이전의 코멘트를 삭제했다. 파이썬에서는 이것이 어떻게 할 수 있는지 전혀 모른다. 나는 또한 대답을보고 싶다. 나는 커널 소스 코드를 보지 않았지만,'tf.matmul'은 입력 인수'transpose_b'를 허용하기 때문에 이미 BLAS 라이브러리의 내부 최적화가되어있을 것이라고 생각합니다. 나는 계산의 절약이 이미 고려되고있을 가능성이 높다. – greeness

답변

0

NumPy와 함께, 당신은이 작업을 수행 할 수 있습니다 : 이것은 진정한 출력

import numpy as np 

A = np.random.randn(5, 3) 
inds = np.triu_indices(5) # upper triangle indices 

# expensive way to do it 
ipu1 = np.dot(A, A.T)[inds] 


# possibly less expensive way to do it. 
ipu2 = np.einsum('ij,ij->i', A[inds[0]], A[inds[1]]) 

print(np.allclose(ipu1, ipu2)) 

. Tensorflow는 triu_indices 함수를 빌드하지 않지만 필요에 따라 코드를 작성하여 코드를 작성하는 것은 어렵지 않습니다. 그것은 einsum 있습니다.

+0

OP는 TF가 아닌 numpy가 아닌 솔루션을 요청했습니다. triu_indices를 구현하면 첫 번째 전체를 먼저 계산해야하기 때문에 대각선이 아닌 요소에 대해 수행되는 이중 계산을 피할 목적이 없습니다. –