2015-12-08 7 views
1

У меня есть следующий 1D Numpy массив:Сделать 2D из 1D Numpy массива

li = array([ 0.002, 0.003, 0.005, 0.009]) 

li.shape 
(4L,) 

Я хотел бы сделать 2D-Numpy массив (li_2d) с формой (4L, 5L), который выглядит следующим образом :

li_2d = array([[ 0.002, 0.002, 0.002, 0.002, 0.002], 
       [ 0.003, 0.003, 0.003, 0.003, 0.003], 
       [ 0.005, 0.005, 0.005, 0.005, 0.005] 
       [ 0.009, 0.009, 0.009, 0.009, 0.009]]) 

Есть ли функция numpy для этого? Спасибо

+2

Я думаю, что там, вероятно, есть дубликат, но я не уверен, что это правильный вариант (например, дубликат покажет, как использовать 'tile' или' repeat'). –

+3

Да, я был слишком быстр. Вот правильный вариант: http://stackoverflow.com/questions/1550130/cloning-row-or-column-vectors – Mel

ответ

1

Вы можете получить желаемую форму с помощью numpy.tile:

li = np.array([ 0.002, 0.003, 0.005, 0.009]) 
np.tile(li.reshape(4, 1), (1, 5)) 

array([[ 0.002, 0.002, 0.002, 0.002, 0.002], 
     [ 0.003, 0.003, 0.003, 0.003, 0.003], 
     [ 0.005, 0.005, 0.005, 0.005, 0.005], 
     [ 0.009, 0.009, 0.009, 0.009, 0.009]]) 
+0

Спасибо, мне кажется, это самое простое решение. – diegus

+0

@diegus Добро пожаловать. – Scott

0

Вы можете сделать это с помощью np.pad. Во-первых, изменить ваш массив в форме (4,1), затем прокладку 4 колонки на краю:

In [18]: np.pad(li.reshape(4,1),((0,0),(0,4)),mode='edge') 
Out[18]: 
array([[ 0.002, 0.002, 0.002, 0.002, 0.002], 
     [ 0.003, 0.003, 0.003, 0.003, 0.003], 
     [ 0.005, 0.005, 0.005, 0.005, 0.005], 
     [ 0.009, 0.009, 0.009, 0.009, 0.009]]) 
0

Вы также можете сделать это с numpy.repeat:

In [5]: np.repeat(li, 5).reshape(li.shape[0], 5) 
Out[5]: 
array([[ 0.002, 0.002, 0.002, 0.002, 0.002], 
     [ 0.003, 0.003, 0.003, 0.003, 0.003], 
     [ 0.005, 0.005, 0.005, 0.005, 0.005], 
     [ 0.009, 0.009, 0.009, 0.009, 0.009]]) 

Вы можете получить транспонирование либо с помощью numpy.tile или оператор транспонирования:

In [8]: np.tile(li, 5).reshape(5, li.shape[0]) 
Out[8]: 
array([[ 0.002, 0.003, 0.005, 0.009], 
     [ 0.002, 0.003, 0.005, 0.009], 
     [ 0.002, 0.003, 0.005, 0.009], 
     [ 0.002, 0.003, 0.005, 0.009], 
     [ 0.002, 0.003, 0.005, 0.009]]) 

In [9]: np.repeat(li, 5).reshape(li.shape[0], 5).T 
Out[9]: 
array([[ 0.002, 0.003, 0.005, 0.009], 
     [ 0.002, 0.003, 0.005, 0.009], 
     [ 0.002, 0.003, 0.005, 0.009], 
     [ 0.002, 0.003, 0.005, 0.009], 
     [ 0.002, 0.003, 0.005, 0.009]]) 
Смежные вопросы