2013-01-22 14 views
15

Iは機能r_ためnumpyのドキュメントに次のように読み取る:)(numpy.r_の構文を理解連結

列整数倍数コンマ 分離アレイに沿ってスタックする軸を指定します。コンマで区切られた2つの整数の文字列 は、各 の入力を2番目の整数(連結する軸は最初の整数 )に強制する最小の次元数を示します。

と、彼らはこの例与える:私は従わない

>>> np.r_['0,2', [1,2,3], [4,5,6]] # concatenate along first axis, dim>=2 
array([[1, 2, 3], 
     [4, 5, 6]]) 

を、正確に文字列'0,2'指示しnumpyのは、何をするのでしょうか?

上記のリンク以外にも、この機能に関する詳細なドキュメントがある別のサイトはありますか?

答えて

13

'n,m'axis=nに沿って連結し、少なくともm寸法を有する形状を生成するr_に指示:

In [28]: np.r_['0,2', [1,2,3], [4,5,6]] 
Out[28]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 

は、そこで、軸= 0に沿って連結されている、と我々は通常どおりしたがって、結果は形状(6,)を期待しますが、m=2以来、r_には形状が少なくとも2次元でなければならないと伝えています。あなたがr_で行うことができます

In [36]: np.r_['0,3', [1,2,3,], [4,5,6]].shape 
Out[36]: (2, 1, 3) # <- 3 dimensions 

In [37]: np.r_['0,4', [1,2,3,], [4,5,6]].shape 
Out[37]: (2, 1, 1, 3) # <- 4 dimensions 

何も読みやすく、アレイ構築機能の一つで行うことができます:私たちはmを増やすときに何が起こるかで

In [32]: np.r_['0,2', [1,2,3,], [4,5,6]].shape 
Out[32]: (2, 3) 

ルック:だからではなく、我々は形状(2,3)を取得します例えばnp.concatenate,np.row_stack,np.column_stack,np.hstack,np.vstackまたはnp.dstackのようなものであるが、reshapeも必要とする場合がある。

でも再構築するための呼び出しで、これらの他の機能はより速くことがあります

In [38]: %timeit np.r_['0,4', [1,2,3,], [4,5,6]] 
10000 loops, best of 3: 38 us per loop 
In [43]: %timeit np.concatenate(([1,2,3,], [4,5,6])).reshape(2,1,1,3) 
100000 loops, best of 3: 10.2 us per loop 
+0

は[unutbu](http://stackoverflow.com/users/190597/unutbu)「私はないんだけど書きましたこの表記法のファンです。 "、なぜ私は最初に数値/数値配列で導入されたのだろうかと思います。通常の容疑者はmatlabとの互換性がありますが、私はfortran-> pythonに移行しました。私は確かに教えるのに十分なmatlabを知りません... – gboffi

3

文字列 '0,2'はnumpyに軸0(第1の軸)に沿って連結し、要素を十分な角括弧で囲んで2次元配列を保証するように指示します。以下の結果を考慮してください

for axis in (0,1): 
    for minDim in (1,2,3): 
     print np.r_['{},{}'.format(axis, minDim), [1,2,30, 31], [4,5,6, 61], [7,8,90, 91], [10,11, 12, 13]], 'axis={}, minDim={}\n'.format(axis, minDim) 

[ 1 2 30 31 4 5 6 61 7 8 90 91 10 11 12 13] axis=0, minDim=1 

[[ 1 2 30 31] 
[ 4 5 6 61] 
[ 7 8 90 91] 
[10 11 12 13]] axis=0, minDim=2 

[[[ 1 2 30 31]] 

[[ 4 5 6 61]] 

[[ 7 8 90 91]] 

[[10 11 12 13]]] axis=0, minDim=3 

[ 1 2 30 31 4 5 6 61 7 8 90 91 10 11 12 13] axis=1, minDim=1 

[[ 1 2 30 31 4 5 6 61 7 8 90 91 10 11 12 13]] axis=1, minDim=2 

[[[ 1 2 30 31] 
    [ 4 5 6 61] 
    [ 7 8 90 91] 
    [10 11 12 13]]] axis=1, minDim=3