2012-07-25 5 views
2

저는 컴퓨터 과학 교과서에서 몇 가지 개념을 연구 중입니다. 선형 대수학은 많이 사용되며, 교과서에 나오는 예제는 모두 Numpy를 사용합니다.Numpy : 1의 벡터로 곱하기

특히 하나의 표현은 완전히 쓸모없는 표현 인 것처럼 보이기 때문에 완전히 혼란 스럽습니다. 교과서에서 그대로 복사, 그것은 말한다 : 그래서

normalisers = sum(exp(outputs),axis=1)*ones((1,shape(outputs)[0]))

, 나는 우리에게 제공, (이 여기에 문제와 관련된 아니다) 간략화를 위해 exp을 제거 할 수 있습니다 :

sum(outputs,axis=1)*ones((1,shape(outputs)[0]))

여기에서 outputs은 2 차원 Numpy array (매트릭스)이다.

내가 알 수있는 한, 이것은 outputs 행렬의 모든 행을 합계 한 다음 결과 벡터를 요소별로 1의 벡터로 곱하는 것입니다. 그래서 ... 여기에 모든 것을 곱하는 것이 무엇입니까? 값을 전혀 변경하지 않을 것입니다.

교과서에 오류가 있습니까? 아니면 모든 물체를 곱하면 여기 값에 어떤 영향을 줄 수 있습니까? 나는이 시점에서 다소 Numpy에 익숙하기 때문에이 표현의 함축적 의미를 오해하고 있는지 확실하지 않습니다. mutzmatron는 주석의 글 outputs 배열 때

+2

결과가 (희미한) 벡터에서 (1, 희미한) 행렬로 변경됩니까? 비록 내가 그것을 할 것 인 방식으로 인정하지 않지만! – jmetz

+0

매트릭스가 (n,) 또는 (1, n) 크기이든간에 나중에 차이를 만들 수 있다고 생각합니다 ... – jmetz

답변

3

는,이 승산에 (1,n)(n,)에서 sum 결과의 형상을 변경하는 고도의 고안 방식이다. 그렇게 할 수있는 신속하고 관용적 인 방법은 reshape 선형 시간과 메모리보다는 일정이 걸리기 때문에,이 읽을과 확장 성을 둘 다 교과서에 제시된 방법과는 대조적으로

sum(exp(outputs), axis=1).reshape(1, -1) 

입니다. outputs 배열하지만 지칠대로 지친 유형 np.matrix의 객체가 아닌 경우

그러나, 결과는 완전히 다른 것입니다 : (.하지만 여전히, 그것은 다른 동작을 표현하는 인위적인 방법입니다)

>>> outputs = np.matrix(outputs) 
>>> (sum(exp(outputs), axis=1) * ones((1,shape(outputs)[0]))).shape 
(10, 10)