2017-09-18 1 views
-1

Je suis vraiment nouveau au numpy et actuellement confus avec des valeurs négatives dans la forme.Remodeler numpy avec des valeurs négatives

numpy import comme np

a=np.arange(6) 
c=a.reshape(1,3,2) 
d=a.reshape(-1,3,2) 
e=a.reshape(-1,1,2) 
print c 
print 
print d 
print 
print e 

et il retourne

[[[0 1] 
    [2 3] 
    [4 5]]] 

[[[0 1] 
    [2 3] 
    [4 5]]] 

[[[0 1]] 

[[2 3]] 

[[4 5]]] 

La question ici est que lorsque l'on compare c et d, il n'y a pas de différence. Cependant, dans e, une ligne vide supplémentaire est formée entre chaque rangée. Alors, que fait exactement le -1 dans la fonction reshape, et pourquoi il provoque des lignes vides entre chaque ligne dans e? Merci !

+0

Il est demandé avant et [ici] (https://stackoverflow.com/a/ 42510505/6900838) est une bonne explication: – Alperen

+0

Je reconnais clairement cela mais cela ne me donne pas d'explication sur les lignes vides. Voilà ce que je suis curieux de savoir –

Répondre

0

La différence entre c et e est non seulement l'espace supplémentaire, mais aussi le support supplémentaire autour de chaque paire, à savoir

[2 3] vs [[2 3]] 

En effet, la forme de c est [1, 3, 2], tandis que la forme de e est [3, 1, 2]. La forme de d est également [1, 3, 2], et c'est pourquoi c et d sont égaux.

Lorsque vous mettez -1 en forme, numpy il infère des autres dimensions, qui est remplace -1 avec product of all dimensions of a/product of all specified shapes

0

Lorsque vous ajoutez -1 à un axe dans numpy il mettra simplement tout le reste dans cet axe. Ceci est, pour un tableau a de forme (10, 10), les opérations suivantes seront appliquées:

>>> a.reshape(-1, 10, 10) # a is (1, 10, 10) 
>>> a.reshape(1, 10, 10) # a is also (1, 10, 10) 
>>> a.reshape(-1, 5, 5) # a is (4, 5, 5), since 4 * 5 * 5 = 100 
>>> a.reshape(-1, 5, 10) # a is (2, 5, 10) since 2 * 5 * 10 = 100 

Ceci est, en remodelant le nombre total d'éléments doivent être identiques, afin d'ajouter -1 à la forme permet simplement numpy calculer la valeur résiduelle pour vous, afin que le produit des axes corresponde toujours au nombre d'éléments précédent.