2017-09-21 1 views
0

Je suis en train de lire le code source d'un projet open source récemment. Lorsque le programmeur a voulu convertir un vecteur ligne comme array([0, 1, 2]) en un vecteur colonne comme array([[0], [1], [2]]), np.reshape(x, (-1,1)) a été utilisé. Dans le commentaire, il est dit que reshape est nécessaire pour préserver la contiguïté des données contre [:, np.newaxis] qui ne le fait pas.np.reshape (x, (-1,1)) vs x [:, np.newaxis]

J'ai essayé les deux façons, il semble qu'ils vont retourner les mêmes résultats. Alors, que signifie la préservation de la contiguïté des données ici?

+0

Une partie de cette histoire se perd dans le récit. (Par exemple, les parties concernant un "vecteur de ligne" semblent incorrectes: un vecteur de ligne réel 1-by-any répondrait différemment à ces opérations.) – user2357112

Répondre

0

Les deux méthodes renvoient des vues de données identiques, par conséquent, la «contiguïté des données» est probablement un problème, car les données ne sont pas modifiées, seule la vue est modifiée. Voir Numpy: use reshape or newaxis to add dimensions.

Cependant, il peut être pratique d'utiliser .reshape((-1,1)), car il remodèlera le tableau en tableau 2d quelle que soit la forme originale. Pour [:, np.newaxis], le résultat dépendra de la forme originale du tableau, compte tenu de celles-ci:

In [3]: a1 = np.array([0, 1, 2]) 

In [4]: a2 = np.array([[0, 1, 2]]) 

In [5]: a1.reshape((-1, 1)) 
Out[5]: 
array([[0], 
     [1], 
     [2]]) 

In [6]: a2.reshape((-1, 1)) 
Out[6]: 
array([[0], 
     [1], 
     [2]]) 

In [7]: a1[:, np.newaxis] 
Out[7]: 
array([[0], 
     [1], 
     [2]]) 

In [8]: a2[:, np.newaxis] 
Out[8]: array([[[0, 1, 2]]])