Python est un langage de programmation souvent utilisé dans la recherche sur l'apprentissage automatique. Surtout lorsque vous souhaitez l'utiliser dans le domaine de la recherche fondamentale, cela devient souvent difficile à utiliser. En effet, l'écriture de nombreuses instructions for ralentit. Donc, si vous essayez de faire de votre mieux sans écrire une déclaration for, vous rencontrerez divers problèmes, mais j'aimerais vous présenter comment utiliser np.newaxis
, avec lequel j'ai eu des problèmes. Vous rencontrerez souvent cela lorsque vous souhaitez expérimenter différents paramètres.
[Python] Numpy Reference, Extraction, Join Indexing - docs.scipy.org
Au début, c'est une bonne idée de trier le type de données dont vous disposez et le type d'objectifs que vous souhaitez atteindre. Gardez à l'esprit le type de données, la forme du tableau et sa dimension.
Par souci de simplicité, considérez la situation suivante.
init.py
import numpy as np
assert a.shape == (N,) # ndarray
assert b.shape == (N, K) # ndarray
et
b sont des vecteurs, et je veux faire ʻa + b
Si vous écrivez ceci avec une instruction for,
naive.py
c = np.zeros(N, K)
for k in range(K):
c[:, k] = a + b[:, k]
Cependant, je ne veux pas écrire autant que possible une instruction for. Vous pouvez aussi simplement faire «a + b», mais cela ne pourra pas du tout gérer des problèmes compliqués.
Le but cette fois est de faire «a + b» pour chaque échantillon «K» de «b» et d'obtenir le résultat pour chaque échantillon. Définissons fermement la forme du résultat final = (disposition des objectifs).
goal.py
c = np.zeros(N, K)
hogehoge()
assert c.shape == (N, K)
Ce sera comme ça.
Normalement, quand je mets ʻa + b` dans ma tête, ça ressemble à ceci,
Je ne sais pas comment calculer car «b» est un tableau à deux dimensions avec plusieurs échantillons.
Laissez-moi vous donner des instructions sur la façon de calculer cela. C'est «np.newaxis».
En fait, la substance de «np.newaxis» est «Aucun», mais utilisons «np.newaxis» sans trop nous inquiéter.
Lorsqu'une opération (ici +
) qui nécessite que le tableau ait la même forme arrive, nous vous demanderons de "lui donner la même forme" à partir d'ici. Premièrement, puisque la dimension du tableau est ʻa.shape == (N,) , au moins ʻa.shape == (N, 1)
. Pour ce faire, utilisez ʻa [:, np.newaxis] . Cette opération permet à Numpy de déterminer automatiquement à partir de l'autre argument de l'opérateur, qui s'étend de
(N, 1)à
(N, K)` et effectue le calcul.
add_samples.py
import numpy as np
assert a.shape == (N,) # ndarray
assert b.shape == (N, K) # ndarray
# a[:, (Pas assez ici)]
c = a[:, np.newaxis] + b[:, :]
assert c.shape == (N, K) #Ayons le rôle de vérification des erreurs et de mémo en même temps
De cette façon, une compréhension calme de ce que fait Numpy facilite automatiquement la résolution de problèmes complexes.
Je l'ajouterai plus tard même si c'est un problème plus difficile.
Si vous trouvez l'explication difficile à comprendre, veuillez nous en informer. Les questions, etc. sont également acceptées dans les commentaires.
Recommended Posts