Python Numpy оптимизированное вычисление среднего значения массива по индексам, заданным другим массивом - PullRequest
0 голосов
/ 09 апреля 2020

Как вычислить средние значения массива numpy y, используя индексы x из другого массива?

import numpy
x = numpy.array([100, 100, 20000, 20000, 100, 13, 100, numpy.nan])
y = numpy.array([10, 20, 30, 40, numpy.nan, 50, 60, 70])

ожидаемый результат:

result['13']: (50)/1

result['100']: (10+20+60)/3

result['20000']: (30+40)/2

Следующее код работает, но не эффективен из-за размера моих реальных наборов данных:

result = {}
unique = numpy.unique(x[~numpy.isnan(x)]).astype(int)
for elem in unique:
    pos = numpy.where(x == elem)
    avg = numpy.nanmean(y[pos])
    result[elem]=avg
print(result)

Я читал о numpy .bincount, но не смог его использовать.

1 Ответ

1 голос
/ 09 апреля 2020

Вот как использовать bincount:

>>> nn=~(np.isnan(x)|np.isnan(y))
>>> xr,yr = x[nn],y[nn]
>>> unq,idx,cnt=np.unique(xr,return_inverse=True,return_counts=True)
>>> dict(zip(unq,np.bincount(idx,yr)/cnt))
{13.0: 50.0, 100.0: 30.0, 20000.0: 35.0}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...