Как сделать Список из Матрицы Numpy в Python - PullRequest
39 голосов
/ 03 марта 2011

Я использовал функцию dot () из numpy для умножения матрицы 3x3 на numpy.array 1x3. Например, вывод:

[[0,16666667 0,66666667 0,16666667]]

типа:

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

как я могу преобразовать это в список. Поскольку я знаю, что результат всегда будет матрицей 1х3, поэтому его следует включить в список, потому что мне нужно иметь возможность просмотреть его позже для вычисления расстояния Пирсона двух из этих списков.

Итак, подведем итог: как мне составить список из этой матрицы?

Ответы [ 10 ]

44 голосов
/ 03 марта 2011

Не может быть оптимальным способом сделать это, но следующие работы:

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

или

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

или

numpy.array(a)[0].tolist()
15 голосов
/ 03 марта 2011

Если a ваша матрица, попробуйте

a.ravel().tolist()

но вам не нужно превращать его в список для его перебора.

14 голосов
/ 03 марта 2011

Используйте метод tolist () для объекта матрицы:

>>> import numpy
>>> m = numpy.matrix([1, 2, 3])
>>> type(m)
<class 'numpy.core.defmatrix.matrix'>
>>> m.tolist()
[[1, 2, 3]]
10 голосов
/ 03 марта 2011

Другой способ:

>>> import numpy as np
>>> m = np.matrix([1,2,3])
>>> np.array(m).flatten().tolist()
[1,2,3]
1 голос
/ 17 августа 2017

Я думаю, getA1() может сделать работу.
Из документации:

getA1 ()

Верните себя как сплющенный ndarray.

Эквивалентно np.asarray (x) .ravel ()

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

1 голос
/ 02 мая 2016

почему бы не просто:

list(a.flat)

например:

>>> 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 голос
/ 11 декабря 2014

Попробуйте этот упрощенный подход. Работает с одномерными массивами, не знаю с большими размерами.

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 голос
/ 03 марта 2011
m = numpy.matrix([[ 0.16666667, 0.66666667, 0.16666667]])
a = numpy.array(m)[0]

for i in a:
    print i

результат в

0.16666667
0.66666667
0.16666667
0 голосов
/ 25 марта 2015
import numpy as np
a = np.matrix([[1,2,3,4]])
b = map(float, a.transpose())

Этот фрагмент кода будет применять встроенную функцию «float» - которая преобразует что-то в число с плавающей запятой - к каждому элементу a . Поскольку первый элемент a является самим массивом, его необходимо транспонировать, чтобы каждое число становилось элементом самого a . a.transpose () эквивалентен np.matrix ([[1], [2], [3], [4]]) в этом примере.

0 голосов
/ 26 мая 2014

Я пришел сюда в поисках способа конвертировать числовые матрицы в типичные 2D-списки.

Для числовой матрицы m:

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

Если вы просто хотите получить одномерный список из1 матрица xn:

my_1d_list = list(list(m.A)[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...