Numpy: ファンキーなvstack

作成日 2020年07月22日  ·  7コメント  ·  ソース: numpy/numpy

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)がある方がはるかに理にかなっています。

33 - Question

全てのコメント7件

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配列は水平でも垂直でもありません。 そして、 hstackconcatenateにフォールバックし、ディメンションを追加するのを忘れます。 これは確かに「ファンキー」に見えます。 しかし、あなたが話し合うことに慣れていないのなら、まあ…

他のすべての?stack関数も、現在の操作に必要な値よりも暗い場合にのみ、追加の薄暗い値を追加します。 この場合、0dのみが含まれます。

@Atcoldユーザーをstack近づけるための提案を

このページは役に立ちましたか?
0 / 5 - 0 評価