Сведение массива матриц к одной матрице (python) - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть список матриц:

arr = [array([[1, 2, 3], [7, 8, 9]]), array([[4, 5, 6], [0, 0, 1]])]

Я хочу сгладить их следующим образом:

[[1, 2, 3], [7, 8, 9], [4, 5, 6], [0, 0, 1]]

numpy.flatten сведет его в один массив чисел.Я попробовал это: flattened_list = [y for x in arr for y in x] Это делает работу, но все строки матрицы являются массивами.Есть ли способ сгладить массивы на определенную глубину?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

То, что вы хотите, это функция vstack от numpy.Он принимает кортеж ndarrays и возвращает новый ndarray, который является результатом их вертикального наложения с первым ndarray сверху и т. Д.

Например:

import numpy as np

>>> a = np.array([1, 2])
>>> b = np.array([3, 4])
>>> c = np.array([5, 6])
>>> np.vstack(a, b)
array([[1, 2],
       [3, 4],
       [5, 6]])

В вашемВ этом случае вы можете легко вызвать функцию tuple в вашем списке ndarrays

>>> arr = [array([[1, 2, 3], [7, 8, 9]]), array([[4, 5, 6], [0, 0, 1]])]
>>> np.vstack(tuple(arr))
array([[1, 2, 3],
       [7, 8, 9],
       [4, 5, 6],
       [0, 0, 1]])

Если вы хотите, чтобы ваш ответ был списком Python, просто вызовите функцию ndarray.tolist numpy для результата следующим образом:

>>> np.ndarray.tolist(np.vstack(arr))
[[1, 2, 3], [7, 8, 9], [4, 5, 6], [0, 0, 1]]
0 голосов
/ 27 ноября 2018

Вы должны использовать изменение формы:

out = arr.reshape((4,3))
...