2016-11-28 7 views
0

Как заполнить массив numpy строками?Заполнить массив numpy строками

Например arr=np.zeros([3,2]). Я хочу, чтобы заменить каждую строку на list = [1,2].

Так выходе:

[1 2 
1 2 
1 2] 

Я могу сделать это вручную

for x in arr[:]: 
    arr[:]=[1,2] 

Но я верю, что есть еще быстрее пути.

К сожалению, посмотрите пожалуйста исправить: Предположим, мы имеем:

arr=array([[[ 0., 0., 0.], 
     [ 0., 0., 0.]], 

     [[ 0., 0., 0.], 
     [ 0., 0., 0.]], 

     [[ 0., 0., 0.], 
     [ 0., 0., 0.]]]) 

Я хочу обр [1] массив заполнить на [1,2], как это:

arr=array([[[ 0., 0., 0.], 
     [ 0., 0., 0.]], 

     [[ 1., 1., 1.], 
     [ 2., 2., 2.]], 

     [[ 0., 0., 0.], 
     [ 0., 0., 0.]]]) 
+0

ваш исходный массив на самом деле все нули? – wwii

+0

Какая форма вашего массива? – wwii

ответ

1

Ваш ISN петли Не нужно.

Используя broadcasting, вы можете сделать это с помощью одного задания:

arr[:] = [1,2] 

Numpy транслирует правой стороне массива в форме, присваиваемые в левой стороне.


Что касается второго вопроса (в вашем обновлении), вы можете сделать:

arr.T[..., 1] = [1,2] 
+0

просмотрите обновление – user7198142

+0

@ user7198142 просмотрите обновленный ответ – shx2

0

В этом случае простое задание на весь массив работ:

In [952]: arr=np.zeros((3,2),int) 
In [953]: arr[...]=[1,2] 
In [954]: arr 
Out[954]: 
array([[1, 2], 
     [1, 2], 
     [1, 2]]) 

Это потому, что список переводится в массив (2), который может быть передан на (1,2), а затем (3,2), в соответствии с arr:

In [955]: arr[...]=np.array([3,2])[None,:] 
In [956]: arr 
Out[956]: 
array([[3, 2], 
     [3, 2], 
     [3, 2]]) 

Если я хочу, чтобы установить значения по столбцам, я должен сделать немного больше работы

In [957]: arr[...]=np.array([1,2,3])[:,None] 
In [958]: arr 
Out[958]: 
array([[1, 1], 
     [2, 2], 
     [3, 3]]) 

я должен явно сделать (3,1) массив, который вещает на (3,2).

=================

Я уже ответил на ваш вопрос модифицирована:

In [963]: arr[1,...]=np.array([1,2])[:,None] 
In [964]: arr 
Out[964]: 
array([[[ 0., 0., 0.], 
     [ 0., 0., 0.]], 

     [[ 1., 1., 1.], 
     [ 2., 2., 2.]], 

     [[ 0., 0., 0.], 
     [ 0., 0., 0.]]]) 

=========== ======

tile Добавить в ваш инструментарий:

In [967]: np.tile([1,2],(3,1)) 
Out[967]: 
array([[1, 2], 
     [1, 2], 
     [1, 2]]) 
In [968]: np.tile([[1],[2]],(1,3)) 
Out[968]: 
array([[1, 1, 1], 
     [2, 2, 2]]) 
+0

просмотрите обновление – user7198142

+0

Я уже показываю, как заполнять столбец. См. Мое редактирование – hpaulj

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