2017-09-08 6 views
0
j=np.arange(20,dtype=np.int) 
site=np.ones((20,200),dtype=np.int) 
sumkma=np.ones((100,20)) 

[sumkma[site[x],x] for x in range(20)] 

Cela fonctionne, mais je ne veux pas utiliser pour la boucle. Lorsque je tentenon concordance de forme: les tableaux d'indexation n'ont pas pu être diffusés avec des formes

sumkma[site[j],j] 

Je reçois cette erreur:

IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (20,200) (20,)

Comment corriger l'erreur?

+0

Quelle est la forme de la sortie que vous attendez? – tmbo

+0

J'attends (20,200) –

+0

La diffusion NumPy aligne les cotes de droite à gauche, pas de gauche à droite. – user2357112

Répondre

1

Lors de l'accès à un tableau multidimensionnel numérique avec d'autres tableaux multidimensionnels de type entier, les tableaux utilisés pour les index doivent avoir la même forme.

Numpy diffusera heureusement, si possible - mais pour que cela soit possible, les matrices doivent avoir la même dimensionalité, par ex. cela fonctionne:

sumkma[site[j], j[:,np.newaxis]] 

Les résultats np.newaxis en j[:,np.newaxis] étant en deux dimensions (forme est maintenant (20,1), alors que la forme de j est une dimension (20,)). Il a maintenant une forme qui peut être diffusé à la forme de site[j]:

>>> j.shape 
(20,) 
>>> site[j].shape 
(20,200) 
>>> j[:,np.newaxis].shape 
(20,1) 

Le même dimensionnalité pour les tableaux d'index permet numpy de les diffuser à la même forme (20,200).

https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html#indexing-multi-dimensional-arrays