Par exemple, la forme du tableau est 5,4.
a = [[1 4] [3 1] [4 8] [8 1] [6 4] [5 0] [5 1] [0 9] [5 8] [7 4]]
Je veux que le tableau soit remodelé comme suit:
a = np.random.randint(10, size= (5, 4)) a = [[1 4 5 0] [3 1 5 1] [4 8 0 9] [8 1 5 8] [6 4 7 4]]
Ma taille de tableau d'origine est d'environ 200 Go et de forme 80000 * 480600. J'ai essayé d'utiliser le mode de remappage mais c'est très lent.
3 Réponses :
Utilisez numpy. hsplit et numpy.concatenate : - >>> a = np.random.randint(10, size= (5, 4))
>>> a
array([[8, 5, 8, 9],
[9, 5, 6, 3],
[5, 3, 8, 7],
[9, 0, 9, 9],
[0, 7, 8, 0]])
>>> t = np.hsplit(a, 2)
>>> t
[array([[8, 5],
[9, 5],
[5, 3],
[9, 0],
[0, 7]]), array([[8, 9],
[6, 3],
[8, 7],
[9, 9],
[8, 0]])]
>>> np.concatenate([t[0], t[1]])
array([[8, 5],
[9, 5],
[5, 3],
[9, 0],
[0, 7],
[8, 9],
[6, 3],
[8, 7],
[9, 9],
[8, 0]])
merci de m'avoir fait part de np.hsplit! c'était très utile!
hsplit
et reshape
fonctionne également
np.reshape(np.hsplit(a, 2), (-1,2)) Out[99]: array([[1, 4], [3, 1], [4, 8], [8, 1], [6, 4], [5, 0], [5, 1], [0, 9], [5, 8], [7, 4]])
Cela peut être fait avec un remodelage et une transposition (et un remodelage final)
In [200]: np.concatenate(np.hsplit(arr,2), axis=0) Out[200]: array([[ 0, 1], [ 4, 5], [ 8, 9], [12, 13], [16, 17], [ 2, 3], [ 6, 7], [10, 11], [14, 15], [18, 19]])
Identifier la bonne transposition (ou swapaxes
) peut nécessiter un peu d'essai et erreur.
In [199]: arr.reshape(5,2,2).transpose(1,0,2).reshape(-1,2) Out[199]: array([[ 0, 1], [ 4, 5], [ 8, 9], [12, 13], [16, 17], [ 2, 3], [ 6, 7], [10, 11], [14, 15], [18, 19]])
L'équivalent avec split et concatenate:
In [195]: arr = np.arange(20).reshape(5,4) In [196]: arr Out[196]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]]) In [197]: arr.reshape(5,2,2) Out[197]: array([[[ 0, 1], [ 2, 3]], [[ 4, 5], [ 6, 7]], [[ 8, 9], [10, 11]], [[12, 13], [14, 15]], [[16, 17], [18, 19]]]) In [198]: arr.reshape(5,2,2).transpose(1,0,2) Out[198]: array([[[ 0, 1], [ 4, 5], [ 8, 9], [12, 13], [16, 17]], [[ 2, 3], [ 6, 7], [10, 11], [14, 15], [18, 19]]])
La route de transposition devrait être plus rapide. p >
Merci beaucoup pour le commentaire!
Vous devez ajouter le code que vous avez essayé, afin que nous sachions ce qui prend trop de temps. Il y a un article en double ailleurs. Veuillez vérifier ce lien et voir si cela vous aide. stackoverflow.com/questions/14476415/reshape-an-array -en-num py