Я сделал, чтобы Numpy выстроил и список индексов, значения которых я хотел бы увеличить одним. Этот список может содержать повторенные индексы, и я хотел бы, чтобы инкремент масштабировался с количеством повторений каждого индекса. Без повторений команда проста:
a=np.zeros(6).astype('int')
b=[3,2,5]
a[b]+=1
С повторениями я придумал следующий метод.
b=[3,2,5,2] # indices to increment by one each replicate
bbins=np.bincount(b)
b.sort() # sort b because bincount is sorted
incr=bbins[np.nonzero(bbins)] # create increment array
bu=np.unique(b) # sorted, unique indices (len(bu)=len(incr))
a[bu]+=incr
Действительно ли это - лучший способ? Есть ли существует риск, связанный с предположением что np.bincount
и np.unique
операции привели бы к тому же отсортированному порядку? Я пропускаю некоторую простую деятельность Numpy для решения этого?
] После того, как ты сделаешь [
]... [bbins=np.bincount(b)
]
[] почему бы и нет: [
] [a[:len(bbins)] += bbins
]
[](Редактировано для дальнейшего упрощения.) [
] Если B
- небольшой подрез A
, можно уточнить ответ Alok, как это:
import numpy as np
a = np.zeros( 100000, int )
b = np.array( [99999, 99997, 99999] )
blo, bhi = b.min(), b.max()
bbins = np.bincount( b - blo )
a[blo:bhi+1] += bbins
print a[blo:bhi+1] # 1 0 2