2016-07-29 3 views
2

У меня есть массив, скажем p = [2,3,2,4] и номер, скажем n = 4. Мне нужно создать массив единиц и нулей в соответствии с шаблоном p, n-p. То есть для каждого элемента u в p есть u, за которыми следуют n-u нули. Это очень легко сделать, используя операцию np.insert. Но у anano нет никакой вставки op. Можно ли достичь этого, не используя петлю? Кроме того, учитывая множество таких ps и соответствующих ns, можно ли генерировать шаблоны с нулями и без использования цикла? Вот пример: 1 значение р:Повторите номера в соответствии с шаблоном numpy

p = [2,3,2,4,1], n=4 
n-p = [2,1,2,0,3] 
result = [1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0] 

несколько значений р: В этом случае все р будет иметь ту же размерность (р является 2D массив)

p = [[2,3,2,4,1],[2,2,3,5,4]], n = [4, 5] 
n-p = [[2,1,2,0,3],[3,3,2,0,1]] 
result = [[1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],[1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0]] 

Пожалуйста, обратите внимание, что я «ве проложенный результат [0] с 0s в конце, чтобы соответствовать размерам результата [0] и результат [1]

+0

Можете ли вы опубликовать вывод, например? –

ответ

3
p = numpy.array([2, 3, 2, 4]) 
n = 4 
result = (p[:, None] > numpy.arange(n)).ravel().astype(int) 

Мы сравниваем

[[2] 
[3] 
[2] 
[4]] 

до [0 1 2 3], чтобы получить массив булевых элементов, затем сгладить его и преобразовать в целые числа, чтобы получить нужный вам результат.

+0

Можно ли распространить это на двумерный случай? Это когда задано несколько p-массивов? – Aditya369

+0

@ Aditya369: Я не знаю. Фиксация длин для разных значений «n» представляется сложной задачей эффективным образом. – user2357112

+0

Невозможно было бы поместить массивы p на нули? Или установите эти элементы как значения большего массива? Потому что, если n = [4,5] и p.shape [1] = 4, мы знаем, что максимальный размер будет 5 * 4 = 20. Итак, мы создаем 2D-массив размера (p.shape [0], 20) и задаем результаты в этом массиве? – Aditya369

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