2017-01-03 5 views
1

Я пытаюсь заполнить массив numpy, и я не могу найти правильный подход из документации для numpy. У меня есть массив:Заполнение массива numpy с нулями и использование другого массива в качестве индекса для них

a = array([2, 1, 3, 5, 7]) 

Это представляет индекс для массива, который я хочу создать. Поэтому при значении индекса 2 или 1 или 3 и т. Д. Я хотел бы иметь один в массиве и всюду в целевом массиве для заполнения нулями. Похоже на маску массива. Я также хотел бы указать общую длину целевого массива, l. Так что мой идеал функция хотела бы что-то вроде:

>>> foo(a,l) 
array([0,1,1,1,0,1,0,1,0,0,0] 

, где l=10 для приведенного выше примера.

EDIT:

Так что я написал эту функцию:

def padwithones(a,l) : 
    p = np.zeros(l) 
    for i in a : 
     p = np.insert(p,i,1) 
    return p 

Что дает:

Out[19]: 
array([ 0., 1., 0., 1., 1., 1., 0., 1., 0., 0., 0., 0., 0., 
     0., 0.]) 

Что не правильно!

+0

вы пробовали что-нибудь? Возможно, используя 'np.zeros', а затем проиндексированное назначение ... ?? –

+0

, поэтому используйте генератор, чтобы определить, когда один вставлен в массив 'np.zeros'? –

+1

Нет. Просто 'array_of_zeroes [a] = 1' –

ответ

2

Что вы ищете в основном один горячий массив:

def onehot(foo, l): 
    a = np.zeros(l, dtype=np.int32) 
    a[foo] = 1 
    return a 

Пример:

In [126]: onehot([2, 1, 3, 5, 7], 10) 
Out[126]: array([0, 1, 1, 1, 0, 1, 0, 1, 0, 0]) 
+0

это здорово. Благодаря! –

+0

Если вы используете 'dtype = bool', это займет 1/4 место. –

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