Как добавить значения в одном массиве в соответствии с повторяющимися значениями в другом массиве? - PullRequest
2 голосов
/ 07 июня 2019

Предположим, у меня есть массив:

Values = np.array([0.221,0.35,25.9,54.212,0.0022])
Indices = np.array([22,10,11,22,10])

Я хотел бы добавить вместе элементы "Значения", которые имеют одинаковое число в "Индексах".

Другими словами, мойжелаемые результаты:

Total = np.array([0.221+54.212,0.35+0.002,25.9])
Index = np.array([22,10,11])

Я пытался использовать np.unique безрезультатно.Не могу понять это!

Ответы [ 2 ]

3 голосов
/ 07 июня 2019

Мы можем использовать np.unique с его необязательным аргументом return_inverse, чтобы получить идентификаторы, основанные на уникальности в пределах Indices, а затем использовать идентификаторы с bincount для получения суммированных бин (основанных на идентификаторах) сумм и, следовательно, решить это так -

Index,idx = np.unique(Indices, return_inverse=True)
Total = np.bincount(idx, Values)

Выходы для данного образца -

In [32]: Index
Out[32]: array([10, 11, 22])

In [33]: Total
Out[33]: array([ 0.3522, 25.9   , 54.433 ])

В качестве альтернативы, мы можем использовать pandas.factorize, чтобы получить уникальные идентификаторы, а затем bincount, как показано ранее. Итак, первый шаг можно заменить на что-то вроде этого -

import pandas as pd

idx,Index = pd.factorize(Indices)
1 голос
/ 07 июня 2019

Одна из возможностей - рассмотреть возможность использования Панд :

In [14]: import pandas as pd

In [15]: pd.DataFrame({'Values': Values, 'Indices': Indices}).groupby('Indices').agg(sum)
Out[15]: 
          Values
Indices         
10        0.3522
11       25.9000
22       54.4330

Это должно быть само собой разумеющимся, хотя и не сохраняет порядок индексов (из вопроса, заботитесь ли вы об этом, не совсем ясно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...