vstack
ドキュメントから:
署名:
hstack(tup)
Docstring:
配列を水平方向(列方向)に順番にスタックします。これは、1-Dを除いて、2番目の軸に沿った連結と同等です。
最初の軸に沿って連結する配列。
私の質問はなぜ例外ですか?
すでにconcatenate()
ます。
v = rand(5)
concatenate((v, v)).shape
(10,)
hstack((v, v)).shape
(10,)
stack((v, v), axis=1).shape
(5, 2)
vstack((v, v)).shape
(2, 5)
stack((v, v), axis=0).shape
(2, 5)
vstack = stack(axis=1)
がある方がはるかに理にかなっています。
hstack / vstack / dstackは推奨せず、代わりにnp.stack
特に推奨します。 ただし、違いは、2次元配列を渡す場合です。 一部のスタック関数は(特定の化身に対して)新しい次元を挿入しますが、 hstack
は挿入しないと思います。
np.concatenate
またはnp.stack
いずれかが(通常は)推奨されるAPIであることを示す最後の文を追加することは問題ありませんが、関数を削除することに真の願望はないと思います。
私の質問は_なぜ例外_ ???
@sebergがこれに直接答えなかったという理由だけで:
1D配列は通常、「垂直」ではなく「水平」として扱います。 たとえば、 (N, N)
2D配列を(N,)
1D配列でブロードキャストする場合、1D配列は(1, N)
ではなく(N, 1)
(1, N)
にブロードキャストされます。 hstack()/vstack()/dstack()
は、一定軸の概念を中心に構築されていません(必要に応じて、 stack()
使用できます)が、固定軸に適切にマッピングされない「水平/垂直/深さ」の概念すべての配列の次元。
私はhstack()/vstack()/dstack()
自体を思いとどまらせる言語で-1です。 セマンティクスの例外があるため、それらは優れていて便利だと思います。 これらは、 stack()
によって簡潔にキャプチャされていない概念をキャプチャします。
たとえば、1D配列にスカラー値を追加または追加する一般的な必要性があります。 np.hstack([0.0, some_vector])
はこれに最適です。 np.stack([0.0, some_vector])
とnp.concatenate([0.0, some_vector])
は同じ次元を持たないため、ボークします。
確かに、これらのツールは、特定のコンテキストでの作業に少し関連していると思います。 では、これを閉じましょう。 私たちは「ファンキーな」振る舞いのない一般的なツールを持っています、そして他のものはそれらが良いユーティリティであるときのためにそこにとどまります。
@rkern 、次にconcatenate
修正する必要があります、IMHO。 スタッキングとは、追加のdimを追加した後に連結することを意味しますが、ここでは考慮されていません。 でも大丈夫…
@sebergは、非推奨の警告がここで歓迎されるようです。 1D配列は水平でも垂直でもありません。 そして、 hstack
はconcatenate
にフォールバックし、ディメンションを追加するのを忘れます。 これは確かに「ファンキー」に見えます。 しかし、あなたが話し合うことに慣れていないのなら、まあ…
他のすべての?stack
関数も、現在の操作に必要な値よりも暗い場合にのみ、追加の薄暗い値を追加します。 この場合、0dのみが含まれます。
@Atcoldユーザーをstack
に近づけるための提案を