2017-09-21 1 views
0

최근에 오픈 소스 프로젝트의 소스 코드를 읽었습니다. 프로그래머가 array([0, 1, 2])과 같은 행 벡터를 array([[0], [1], [2]])과 같은 열 벡터로 변환하려는 경우 np.reshape(x, (-1,1))이 사용되었습니다. 주석에 따르면 데이터 연속성을 유지하기 위해 변형이 필요하지 않은 [:, np.newaxis]에 대한 수정이 필요하다고합니다.np.reshape (x, (-1,1)) 대 x [:, np.newaxis]

두 가지 방법을 시도했는데 같은 결과를 반환하는 것처럼 보입니다. 그렇다면 여기에서 데이터 연속성 보존이란 무엇을 의미합니까?

+0

일부 부분은 개작에 길을 잃지 않습니다. 예를 들어, "행 벡터"에 대한 부분은 틀린 것으로 보이는데 실제 1 행의 행 벡터는 이러한 연산과 다르게 응답합니다. – user2357112

답변

0

두 방법 모두 정확히 동일한 데이터의 뷰를 반환하므로 데이터가 변경되지 않으므로 '데이터 연속성'이 문제가되지 않을 가능성이 높습니다.보기 만 변경됩니다. Numpy: use reshape or newaxis to add dimensions을 참조하십시오.

그러나 .reshape((-1,1))을 사용하면 원래 모양과 관계없이 어레이를 2 차원 어레이로 재구성 할 수 있으므로 실제 이점이있을 수 있습니다. [:, np.newaxis]를 들어, 결과는 다음을 고려, 배열의 원래 모양에 따라 달라집니다 :이 이야기의

In [3]: a1 = np.array([0, 1, 2]) 

In [4]: a2 = np.array([[0, 1, 2]]) 

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

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

In [7]: a1[:, np.newaxis] 
Out[7]: 
array([[0], 
     [1], 
     [2]]) 

In [8]: a2[:, np.newaxis] 
Out[8]: array([[[0, 1, 2]]]) 
관련 문제