2011-10-03 3 views
6

모양이 (n) 인 숫자가 ndarray 인 개체를 모양 (n, 1)으로 캐스팅하고 싶습니다. 내가 함께 왔어요 가장 좋은 내 자신의 _to_col 기능 롤하는 것입니다numpy : (n,) 배열을 (n, 1) 배열에 캐스팅하려면 syntax/idiom?

def _to_col(a): 
    return a.reshape((a.size, 1)) 

를하지만 나 같은 유비쿼터스 작업이 이미 NumPy와의 구문에 내장되지 않는다는 것을 믿기가 어렵다. 나는 그걸 찾기 위해 올바른 Google 검색을 할 수 없었을뿐입니다.

답변

9

나는 다음 사용하십시오 : 같은 일을 작성하는

a[:,np.newaxis] 

대안 (그러나 아마 약간 덜 명확한) 방법은 다음과 같습니다 버전을 포함

a[:,None] 

위의 모든 ()는 상수 시간 연산입니다.

+0

에 의해 배열을 떨어 뜨릴 : ''[..., None] '으로, 필요한만큼의 차원을 다룹니다. 그러면'a.shape'는'(n, m)'에서'(n, m, 1)'로 바뀝니다. – askewchan

2

임의 축을 추가하려면 np.expand_dims를 가장 좋아합니다.

없음 또는 np.newaxis는 유연한 축을 필요로하지 않는 코드에 적합합니다. (AIX의 대답)

>>> np.expand_dims(np.arange(5), 0).shape 
(1, 5) 
>>> np.expand_dims(np.arange(5), 1).shape 
(5, 1) 

사용 예 : 2 차원 이상의 차 배열의 마지막에 축을 추가하는 대신 콜론의 줄임표를 사용하려면 특정 축

>>> x = np.random.randn(4,5) 
>>> x - x.mean(1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: shape mismatch: objects cannot be broadcast to a single shape 


>>> ax = 1 
>>> x - np.expand_dims(x.mean(ax), ax) 
array([[-0.04152658, 0.4229244 , -0.91990969, 0.91270622, -0.37419434], 
     [ 0.60757566, 1.09020783, -0.87167478, -0.22299015, -0.60311856], 
     [ 0.60015774, -0.12358954, 0.33523495, -1.1414706 , 0.32966745], 
     [-1.91919832, 0.28125008, -0.30916116, 1.85416974, 0.09293965]]) 
>>> ax = 0 
>>> x - np.expand_dims(x.mean(ax), ax) 
array([[ 0.15469413, 0.01319904, -0.47055919, 0.57007525, -0.22754506], 
     [ 0.70385617, 0.58054228, -0.52226447, -0.66556131, -0.55640947], 
     [ 1.05009459, -0.27959876, 1.03830159, -1.23038543, 0.73003287], 
     [-1.90864489, -0.31414256, -0.04547794, 1.32587149, 0.05392166]])