Сгладьте все подмассивы в массиве

#python #numpy #flatten

Вопрос:

У меня есть массив numpy X , который имеет (2 , 2 , 3) такую форму:

 X = [[[1 , 2 , 3 ] 
       [4 , 5 , 6]] , 
     
      [[7 , 8 , 9 ] 
       [10, 11, 12 ]],
 

Я хочу выровнять все подмолоски и превратить X в форму (2 , 6), которая представлена следующим образом:

 X = [[ 1 , 2 , 3 , 4, 5 , 6 ] ,
     [ 7 , 8 , 9 , 10, 11 , 12 ] ]
 

Но когда я использовал X.flatten() , это просто оказалось так:

 X = [ 1 , 2, 3, 4 , 5, ... , 12]
 

Есть ли какая-либо функция, которая поможет мне преобразовать массив так, как я имею в виду.

Ответ №1:

Просто reshape ….

 import numpy as np

arr = np.array([[[1 , 2 , 3 ],
       [4 , 5 , 6]],
       [[7 , 8 , 9 ],
       [10, 11, 12 ]]])


arr.reshape(2, 6)
 

Результат:

 array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12]])
 

Ответ №2:

Выполните итерацию по массиву и выровняйте подсписки

 arr = np.array([x.flatten() for x in X])
 

Или для решения numpy вы также можете использовать np.hstack()

 arr = np.hstack(X)
 

Выход

 print(arr)
#[[ 1  2  3  4  5  6]
# [ 7  8  9 10 11 12]]
 

Комментарии:

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

Ответ №3:

Пройдите по массиву и выровняйте подкомпоненты:

 x = np.array([[[1,2],[3,4]], [[5,6],[7,8]]])
y = np.array([i.flatten() for i in x])
print(x)
print(y)
 

 [[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]

[[1 2 3 4]
 [5 6 7 8]]
 

Ответ №4:

Если это массив numpy, вы можете использовать reshape

 x.reshape(2,6)
 

Ввод:

 x = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]
x.reshape(2,6)
 

Выход:

 array([[ 1,  2,  3,  4,  5,  6],
   [ 7,  8,  9, 10, 11, 12]])