web-dev-qa-db-ja.com

列ごとにNumPy配列を解凍する

私がNumPy配列(5x3など)を持っている場合、次のようにするのではなく、一度に列ごとにアンパックして関数に渡す方法はありますか:my_func(arr[:, 0], arr[:, 1], arr[:, 2])

のようなもの*argsリストのアンパック用ですが、列ごとです。

19
jeff_new

関数の引数に列を使用するために、配列の転置をアンパックできます。

_my_func(*arr.T)
_

以下に簡単な例を示します。

_>>> x = np.arange(15).reshape(5, 3)
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])
_

列を一緒に追加する関数を書きましょう(通常はNumPyのx.sum(axis=1)で行われます):

_def add_cols(a, b, c):
    return a+b+c
_

それから私達は持っています:

_>>> add_cols(*x.T)
array([15, 18, 21, 24, 27])
_

NumPy配列は最初の次元に沿ってアンパックされるため、配列を転置する必要があります。

25
Alex Riley

numpy.split は、配列を複数のサブ配列に分割します。あなたの場合、indices_or_sectionsは3列なので、3であり、axis = 1列で分割しているため。

my_func(numpy.split(array, 3, 1))
11
Stephanie

_numpy.split_は将来十分ではないと思います。代わりに、

_my_func(Tuple(numpy.split(array, 3, 1)))
_

現在、pythonは次の警告を出力します:

FutureWarning:多次元インデックス付けに非タプルシーケンスを使用することは非推奨です。 _arr[seq]_の代わりにarr[Tuple(seq)]を使用します。将来的には、これは配列インデックスarr[np.array(seq)]として解釈され、エラーまたは異なる結果になります。

1
CookieMaster