私がNumPy配列(5x3など)を持っている場合、次のようにするのではなく、一度に列ごとにアンパックして関数に渡す方法はありますか:my_func(arr[:, 0], arr[:, 1], arr[:, 2])
?
のようなもの*args
リストのアンパック用ですが、列ごとです。
関数の引数に列を使用するために、配列の転置をアンパックできます。
_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配列は最初の次元に沿ってアンパックされるため、配列を転置する必要があります。
numpy.split は、配列を複数のサブ配列に分割します。あなたの場合、indices_or_sections
は3列なので、3であり、axis = 1
列で分割しているため。
my_func(numpy.split(array, 3, 1))
_numpy.split
_は将来十分ではないと思います。代わりに、
_my_func(Tuple(numpy.split(array, 3, 1)))
_
現在、pythonは次の警告を出力します:
FutureWarning:多次元インデックス付けに非タプルシーケンスを使用することは非推奨です。 _
arr[seq]
_の代わりにarr[Tuple(seq)]
を使用します。将来的には、これは配列インデックスarr[np.array(seq)]
として解釈され、エラーまたは異なる結果になります。