2013-10-25 3 views
4

Есть ли встроенные функции Numpy, что бы получить:Сглаживание массива только одним слоем?

a=np.asarray([[[1,2],[3,4]],[[1,2],[3,4]]]) 

И вернется:

b=[[1,2],[3,4],[1,2],[3,4]] 

? Что-то вроде сплющивания одного слоя.

P.S. Я ищу векторную опцию, иначе этот немой код будет доступен:

flat1D(a): 
    b=np.array([]) 
    for item in a: 
     b=np.append(b,item) 
    return b 
+0

мой немой код не работает! : D – Cupitor

ответ

8

Вы можете просто изменить форму массива.

>>> a.reshape(-1,a.shape[-1]) 
array([[1, 2], 
     [3, 4], 
     [1, 2], 
     [3, 4]]) 

Показанный код возвращает 1D массив, чтобы сделать это:

>>> a.ravel() 
array([1, 2, 3, 4, 1, 2, 3, 4]) 

Или, если вы уверены, что вы хотите скопировать массив:

>>> a.flatten() 
array([1, 2, 3, 4, 1, 2, 3, 4]) 

Разница между Равель и сглаживание в первую очередь происходит из-за того, что flatten всегда будет возвращать копию, а ravel вернет представление, если это возможно, и копию, если нет.

+0

Отличный ответ. Сегодня я узнал что-то новое. –

0

если вы знаете размеры нового массива вы можете указать их в качестве кортежа (4,2) и использовать .reshape()

a.reshape((4,2)) 
+1

Этот ответ слишком тусклый и не содержит особо полезной информации. Лучше всего на самом деле включить объяснение методов и концепций, которые вы использовали в своем ответе, чтобы новички могли их понять. –

Смежные вопросы