2011-10-03 11 views
6

形状(n)のnumpy ndarrayオブジェクトを形状(n、1)にキャストしたいと思います。私が思い付くした最高のは、私自身の_to_col機能ロールです:numpy:(n、)配列を(n、1)配列にキャストする構文/イディオム?

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

をしかし、私は、このようなユビキタス操作はすでにnumpyのの構文に組み込まれていないことを信じてすることは困難です。私はちょうど私がそれを見つけるために適切なGoogleの検索にヒットすることができていないと私は思います。

答えて

9

私は次のように使用したい:同じことを書くため

a[:,np.newaxis] 

代替(おそらくわずかに少ないクリアな)方法は、次のとおりです。

a[:,None] 

バージョンを含む、上記の全ての( )は、一定時間操作です。

+0

によって配列をおとしめます。 'a [...、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) 

使用例、2D以上NDアレイの端部に軸を追加する代わりに、結腸の省略記号を使用するには、任意の所与の軸

>>> 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]]) 
関連する問題