J'ai couru à travers quelque chose qui m'a semblé incohérent dans les tranches de Numpy. Plus précisément, s'il vous plaît considérer l'exemple suivant:Comportement de découpage apparemment incohérent dans les tableaux numpy
import numpy as np
a = np.arange(9).reshape(3,3) # a 2d numpy array
y = np.array([1,2,2]) # vector that will be used to index the array
b = a[np.arange(len(a)),y] # a vector (what I want)
c = a[:,y] # a matrix ??
Je voulais obtenir un vecteur tel que l'élément i-e est a[i,y[i]]
. J'ai essayé deux choses (b
et c
ci-dessus) et j'ai été surpris que b
et c
ne soient pas les mêmes ... en fait l'un est un vecteur et l'autre est une matrice! J'avais l'impression que :
était un raccourci pour "tous les éléments" mais apparemment le sens est un peu plus subtil.
Après essai et erreur, je comprends un peu la différence aujourd'hui (b == np.diag(c)
), mais apprécierait des éclaircissements sur pourquoi ils sont différents, exactement ce que l'aide :
implique, et comment comprendre quand utiliser les deux cas.
Merci!
Pourquoi pensez-vous que cela soit incohérent? –
Inconsistant parce que dans mon utilisation de Python auparavant, j'ai été entraîné à penser ':' pour signifier "tous les éléments". Quand j'indexe un tableau, j'attends 'myArr [:]' et 'myArr [np.arrage (len (myArr))]' pour obtenir le même résultat. Et c'est le cas, alors j'ai été surpris quand cela n'a pas généralisé à plusieurs dimensions. – Charles
@BradSolomon Je sais qu'ils donnent la même chose, c'est pourquoi je m'attendais à ce que ':' signifie la même chose que 'np.arange (len (a))' :). Ce qu'il fait en 1 dimension, mais pas en deux ou plus – Charles