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