web-dev-qa-db-fra.com

Comment créer une liste à partir de Numpy Matrix en Python

J'utilise la fonction dot () de numpy pour multiplier une matrice de 3x3 avec un numpy.array de 1x3. Le résultat est par exemple ceci:

[[0.16666667 0.66666667 0.16666667]]

qui est de type:

<class 'numpy.matrixlib.defmatrix.matrix'>

comment puis-je convertir cela en une liste. Parce que je sais que le résultat sera toujours une matrice de 1x3, elle doit donc être convertie en liste, car je dois pouvoir la parcourir plus tard pour calculer la distance de Pearson de deux de ces listes.

Donc, pour résumer: comment puis-je faire une liste à partir de cette matrice?

38
Javaaaa

Peut-être que ce n’est pas la meilleure façon de faire cela, mais cela fonctionne:

a = numpy.matrix([[ 0.16666667, 0.66666667, 0.16666667]])
list(numpy.array(a).reshape(-1,))

ou

numpy.array(a).reshape(-1,).tolist()

ou

numpy.array(a)[0].tolist()
42
JoshAdel

Si a est votre matrice, essayez

a.ravel().tolist()

mais vous n'avez pas besoin de le transformer en une liste pour le parcourir.

15
Sven Marnach

Utilisez la méthode tolist () sur l’objet de la matrice:

>>> import numpy
>>> m = numpy.matrix([1, 2, 3])
>>> type(m)
<class 'numpy.core.defmatrix.matrix'>
>>> m.tolist()
[[1, 2, 3]]
14
tito

Autrement:

>>> import numpy as np
>>> m = np.matrix([1,2,3])
>>> np.array(m).flatten().tolist()
[1,2,3]
10
Alejandro

Essayez cette approche simpliste. Cela fonctionne avec les tableaux 1D, je ne sais pas avec des dimensions plus élevées.

import mumpy as np         # to create a numpy array example
a = np.array([1,2.5,3])    # your 1D numpy array
b = [i for i in a]        # your list out of the original numpy array
1
FerYepes

Je pense que getA1() peut faire le travail.
De la documentation:

getA1 () 

Retournez-vous comme un ndarray aplati.

Équivalent à np.asarray (x) .ravel ()

De https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.getA1.html

1
Robert Ribas

pourquoi pas simple:

list(a.flat)

par exemple:

>>> import numpy as np
>>> a = np.matrix([[ 0.16666667, 0.66666667, 0.16666667]])
>>> a
matrix([[ 0.16666667,  0.66666667,  0.16666667]])
>>> a.flat
<numpy.flatiter object at 0x0000000002DE8CC0>
>>> a.flat.tolist()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'numpy.flatiter' object has no attribute 'tolist'
>>> list(a.flat)
[0.16666666999999999, 0.66666667000000002, 0.16666666999999999]
1
yourstruly
m = numpy.matrix([[ 0.16666667, 0.66666667, 0.16666667]])
a = numpy.array(m)[0]

for i in a:
    print i

résulte en

0.16666667
0.66666667
0.16666667
1
Hugh Bothwell
import numpy as np
a = np.matrix([[1,2,3,4]])
b = map(float, a.transpose())

Cet extrait de code appliquera la fonction intégrée "float" - qui convertit quelque chose en un nombre à virgule flottante - à chaque élément de a . Comme le premier élément de a est un tableau lui-même, il doit être transposé pour que chaque nombre devienne un élément de a lui-même. a.transpose () est équivalent à np.matrix ([[1], [2], [3], [4]]) dans cet exemple.

0
user7358

Je suis venu ici pour chercher un moyen de convertir les matrices numpy en listes 2D typiques.

Pour une matrice numpy m:

my_2d_list = map(list, list(m.A))

Si vous voulez juste une liste unidimensionnelle à partir d'une matrice 1 x n:

my_1d_list = list(list(m.A)[0])
0
Aaron Feldman