2014-09-26 5 views
2

NumPy와의 벡터의 모든 가능한 차이의 매트릭스를 구성하는 방법 말할 수 : 나는 형태의 매트릭스를 구성하고 싶습니다내가 한 차원 배열을

import numpy as np 
inp_vec = np.array([1, 2, 3]) 

을 지금

m = [[0, 1-2, 1-3], [2-1, 0, 2-3], [3-1, 3-2, 0]] 

물론 for 루프를 사용하여 수행 할 수 있지만이 작업을 수행하는보다 우아한 방법이 있습니까?

답변

2

이것은 작동하는 것 같다 :

In [1]: %paste 
import numpy as np 
inp_vec = np.array([1, 2, 3]) 

## -- End pasted text -- 

In [2]: inp_vec.reshape(-1, 1) - inp_vec 
Out[2]: 
array([[ 0, -1, -2], 
     [ 1, 0, -1], 
     [ 2, 1, 0]]) 

설명 :

먼저 nx1에 배열을 바꿀. 당신이 1 차원 배열을 뺄 때, 그들은 nxn에 모두 방송 있습니다

array([[ 1, 1, 1], 
     [ 2, 2, 2], 
     [ 3, 3, 3]]) 

array([[ 1, 2, 3], 
     [ 1, 2, 3], 
     [ 1, 2, 3]]) 

그런 다음 빼기 요소 현명한, 원하는 결과를 얻을 수 이루어집니다.

+0

안녕, 대답과 설명 주셔서 감사합니다,하지만 당신은 설명 일부 참조 날 지점 수 nx1에서 nxn으로 확장. 조금 신비 롭다. 또한 빼기가 열 방향으로 이루어진다는 것을 어떻게 알 수 있습니까? 감사합니다 – user3176500

+0

@ user3176500 나는 그것이 뺄셈이 열 단위 또는 행 방향으로 이루어진다 고 말하는 것이 실제로 올바르지 않다고 생각합니다. 편집을보십시오. 규칙에 대한 간단한 설명을 보려면 [이 자습서] (http://wiki.scipy.org/Tentative_NumPy_Tutorial#head-c533fb9a3f1aa90d96e4d8329c1c2f975474c8bf)를 확인하십시오. –

+0

죄송합니다. "그들은 둘 다 nxn으로 브로드 캐스트되었습니다". 물론 빼기는 요소 단위로 이루어집니다. 다시 한 번 감사합니다 – user3176500

2
import numpy as np 
inp_vec = np.array([1, 2, 3]) 

a, b = np.meshgrid(inp_vec, inp_vec) 
print(b - a) 

는 출력 :

Array([[ 0 -1 -2], 
     [ 1 0 -1], 
     [ 2 1 0]]) 
2

이 나뿐만 아니라 좋은 방법을 찾을 :

np.subtract.outer([1,2,3], [1,2,3])