l = [np.array([[1,2],[3,4]]), np.array([5,6]), np.array([[7,8],[9,10],[11,12]])]
Я пытаюсь сгладить этот список массивов, но сохраняю внутренние массивы:
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]
Я пробовал itertools.chain
, np.concatenate
, np.flatten
, но ни один из этих вариантов не дает результата выше
Ваши массивы имеют разное количество измерений, вам необходимо убедиться, что все они двумерные:
out = np.concatenate([x[None,:] if x.ndim == 1 else x for x in l])
выход:
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12]])
или с itertools.chain
с выводом списка:
from itertools import chain
list(chain.from_iterable([x.tolist()] if x.ndim == 1 else x.tolist()
for x in l))
вывод: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]
Вы не предоставили желаемый результат. Но, как я понял, вы ищете это:
x = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]
print([n for m in x for n in m])
с выходом:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Пожалуйста, дайте мне знать, если это не ваш желаемый результат.
В основном вам нужно сгладить каждый подмассив, объединить их и, наконец, изменить его форму.
np.concatenate(list(map(np.ravel, l))).reshape(-1, 2)
выход:
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12]])
np.vstack(l)
?