Увеличьте массив Numpy с повторными индексами

Я сделал, чтобы 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 для решения этого?

15
задан fideli 5 January 2010 в 05:37
поделиться

3 ответа

[

] После того, как ты сделаешь [

]... [
bbins=np.bincount(b)
] [

] почему бы и нет: [

] [
a[:len(bbins)] += bbins
] [

](Редактировано для дальнейшего упрощения.) [

]
6
ответ дан 1 December 2019 в 03:24
поделиться

Почему бы и нет?

for i in b:
    a[i] += 1
-3
ответ дан 1 December 2019 в 03:24
поделиться

Если 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
1
ответ дан 1 December 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: