Si j'ai un tableau NumPy, par exemple 5x3, existe-t-il un moyen de le décompresser colonne par colonne en une seule fois pour passer à une fonction plutôt que comme ceci: my_func(arr[:, 0], arr[:, 1], arr[:, 2])
?
Un peu comme *args
pour le déballage de la liste mais par colonne.
Vous pouvez décompresser la transposition du tableau afin d'utiliser les colonnes pour vos arguments de fonction:
my_func(*arr.T)
Voici un exemple simple:
>>> x = np.arange(15).reshape(5, 3)
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
Écrivons une fonction pour ajouter les colonnes ensemble (normalement fait avec x.sum(axis=1)
dans NumPy):
def add_cols(a, b, c):
return a+b+c
Ensuite nous avons:
>>> add_cols(*x.T)
array([15, 18, 21, 24, 27])
Les tableaux NumPy seront décompressés le long de la première dimension, d'où la nécessité de transposer le tableau.
numpy.split divise un tableau en plusieurs sous-tableaux. Dans ton cas, indices_or_sections
est 3 car vous avez 3 colonnes et axis = 1
puisque nous divisons par colonne.
my_func(numpy.split(array, 3, 1))
Je suppose que numpy.split
Ne suffira pas à l'avenir. Au lieu de cela, il devrait être
my_func(Tuple(numpy.split(array, 3, 1)))
Actuellement, python affiche l'avertissement suivant:
FutureWarning: L'utilisation d'une séquence non-Tuple pour l'indexation multidimensionnelle est déconseillée; utilisez
arr[Tuple(seq)]
au lieu dearr[seq]
. À l'avenir, cela sera interprété comme un index de tableau,arr[np.array(seq)]
, ce qui entraînera soit une erreur, soit un résultat différent.