J'ai la liste de deux tableaux qui était le résultat d'une boucle et j'essaye de faire ce qui suit:

De ceci:

import numpy as np
data=[np.array(['one','two','three']),np.array(['four','five','six'])]
data

Qui donne

[array(['one', 'two', 'three'], dtype='<U5'),
 array(['four', 'five', 'six'], dtype='<U4')]

À ce résultat attendu:

[array([['one'],
        ['two'],
        ['three']], dtype='<U5'),
 array([['four'],
        ['five'],
        ['six']], dtype='<U4')]

J'ai essayé np.split mais je n'ai pas fait ce que j'attendais.

1
saZ 16 sept. 2020 à 18:57

3 réponses

Meilleure réponse

Je pense que vous avez besoin de np.expand_dims pour chaque élément de la liste data comme ceci:

import numpy as np
data=[np.array(['one','two','three']),np.array(['four','five','six'])]
data = [np.expand_dims(ele, axis=1) for ele in data]
2
Minh Nguyen 16 sept. 2020 à 16:08

Essayer

[np.array_split(a,len(a)) for a in data]

Numpy a une fonction par défaut appelée array_split() pour diviser la liste en nombre de listes que vous voulez.

1
Yash 16 sept. 2020 à 18:19

Dans les commentaires, @Tadhg a proposé de prendre la transposition de chaque élément. À première vue, cela peut sembler correct. Mais, la transposition d'un vecteur 1D tel que:

array(['one', 'two', 'three'])

Est simplement:

array(['one',
       'two',
       'three'])

Notez que le vecteur n'a pas vraiment changé, il a toujours la même forme (3,). Pour obtenir le résultat souhaité, vous devez introduire une autre dimension avant la transposition, par ex. comme ceci: array([['one', 'two', 'three']]). La transposition d'un tableau avec une forme de (1, 3) aurait une forme de (3, 1), ce qui est exactement ce que vous voulez. Il ne vous reste plus qu'à appliquer cela à chaque entrée de votre matrice de données:

[np.array([a]).T for a in data]
2
Tadhg McDonald-Jensen 17 sept. 2020 à 19:23