2012-10-10 5 views
5

다음 작업을 벡터화하는 데 어려움을 겪고 있습니다. 나는 x, y, z 거리의 배열을 가지고 있고 나는 각 벡터의 차이점을 서로 찾아야한다.Numpy 2D array 행 단위로 뺄셈

temp_result = np.array([[0.8, 0., 1.], [0., -0.6, 1.],[0.8, 0., 1.]]) 

내가하려는 의도는 루프 반복을 사용하지 않고 빼기입니다.

temp_result[0] - temp_result[0] 
temp_result[0] - temp_result[1] 
temp_result[0] - temp_result[2] 
temp_result[1] - temp_result[0] 
temp_result[1] - temp_result[1] 
temp_result[1] - temp_result[2] 
temp_result[2] - temp_result[0] 
temp_result[2] - temp_result[1] 
temp_result[2] - temp_result[2] 

감사합니다!

답변

2

는 여기에 좋은 모양 변경 기반의 트릭입니다.

+1

다음은 좀 더 간결한 버전입니다 :'diffs = arr [:, None] - arr [None, :]'. 이것은 numpy의 방송 기능의 예입니다 (http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html). –

+0

나는 이미 방송을 이용하고있다. 당신이 거기에서 한 것은'newaxis'를 암시 적으로 사용하는 것입니다 (좋은 해결책입니다). 나는 대답에 그것을 추가 할 것이다, 고마워! – nneonneo

+0

죄송합니다. 방송을 사용하지 않았다는 의미는 아닙니다. 그 진술은 그 방법에 대한 일반적인 논평을 의미했다. –

0

scipy.spatial.distance를 확인하십시오. 모든 거리 대 모든 거리의 함수가 있습니다.

arr = temp_result 
diffs = arr[:,None,:] - arr[None,:,:] 

그런 다음 arr[i]arr[j] 사이의 벡터 차이 diffs[i,j]에서 발견된다 :

+0

나는 numpy 라이브러리 안에 머물고 싶었습니다. 어떤 팁? – Fatoons