Iは、3×4配列で始まり、そして軸1と、3×1アレイを連結した場合、Iは3×5アレイ得る:両方の入力が2つの寸法を有する連結すること
In [911]: x = np.arange(12).reshape(3,4)
In [912]: np.concatenate([x,x[:,-1:]], axis=1)
Out[912]:
array([[ 0, 1, 2, 3, 3],
[ 4, 5, 6, 7, 7],
[ 8, 9, 10, 11, 11]])
In [913]: x.shape,x[:,-1:].shape
Out[913]: ((3, 4), (3, 1))
に注意。
省略:
、及びx[:,-1]
(3)の形状である - それは1Dであり、したがってエラー:
In [914]: np.concatenate([x,x[:,-1]], axis=1)
...
ValueError: all the input arrays must have same number of dimensions
np.append
のコードは
(軸が指定され、この場合)であります
return concatenate((arr, values), axis=axis)
したがって、構文のわずかな変更で、append
が機能します。リストの代わりに2つの引数が必要です。これはリストappend
を真似しますが、そのリストメソッドと混同してはいけません。
return np.concatenate([np.atleast_1d(a) for a in arrs], 1)
をだから、同じx[:,-1:]
入力が必要です。
In [916]: np.append(x, x[:,-1:], axis=1)
Out[916]:
array([[ 0, 1, 2, 3, 3],
[ 4, 5, 6, 7, 7],
[ 8, 9, 10, 11, 11]])
np.hstack
最初は、すべての入力がatleast_1d
され、その後、連結ん確認します。本質的に同じ行動。
np.column_stack
はまた、軸1上CONCATENATEを行うしかし、最初に、これは(3,1)配列には、(3)配列を回すの一般的な方法である
array(arr, copy=False, subok=True, ndmin=2).T
を通して1D入力を渡します。
In [922]: np.array(x[:,-1], copy=False, subok=True, ndmin=2).T
Out[922]:
array([[ 3],
[ 7],
[11]])
In [923]: np.column_stack([x,x[:,-1]])
Out[923]:
array([[ 0, 1, 2, 3, 3],
[ 4, 5, 6, 7, 7],
[ 8, 9, 10, 11, 11]])
すべてのこれらの「スタック」は便利なことができますが、長い目で見れば、それは寸法とベースnp.concatenate
を理解することが重要です。このような関数のコードを調べる方法も知っています。私はipython
??
の魔法をたくさん使っています。
時間テストでは、np.concatenate
が顕著に高速です。このような小さな配列では、関数呼び出しの余分なレイヤーが大きな時間差を作ります。
'np.column_stack'を試してください。 – Divakar
それは働いた!しかし、なぜ? – odo22