Суммируйте 2d числовой массив по элементам - PullRequest
0 голосов
/ 13 октября 2018

Мне нужно суммировать массив NumPy по индексу 1, AKA, региону, в котором находятся виды. Исходные данные находятся в файле .csv, но я преобразовал их в массив NumPy.Осталось только выяснить, как отсортировать и суммировать то, что мне нужно.Будет ли простой оператор if лучше, чем просто функция массива?

Массив выглядит примерно так (ссылка ниже):

#(Species) (Region located) (# of individuals) <-- For your convenience

[['Purple Puffin' '1' '1']
['Wisteria Wombat' '3' '4']
['Pumpkin Pomeranian' '1' '3']
['Wisteria Wombat' '2' '3']
['Burgundy Bichon Frise' '2' '1']
['Purple Puffin' '1' '4']
['Wisteria Wombat' '2' '2']
['Pumpkin Pomeranian' '1' '2']]

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

Мне нужно подвести итог "# лиц" в каждом "Регионе".Окончательный результат должен выглядеть следующим образом в виде массива:

['Burgundy Bichon Frise' '1' '#']
['Pumpkin Pomeranian' '1' '#']
['Purple Puffin' '1' '#']
['Wisteria Wombat' '1' '#']

['Burgundy Bichon Frise' '2' '#']
['Pumpkin Pomeranian' '2' '#']
['Purple Puffin' '2' '#']
['Wisteria Wombat' '2' '#']

['Burgundy Bichon Frise' '3' '#']
['Pumpkin Pomeranian' '3' '#']
['Purple Puffin' '3' '#']
['Wisteria Wombat' '3' '#']

Каждый регион разделен на виды, и каждая популяция видов суммируется вместе.Это должно в конечном итоге в массиве NumPy.

EDIT Я получил массив отсортирован по видам и регионам.Теперь мне просто нужно знать, как сложить "число особей" в каждом регионе по каждому виду.

Ссылка на полный набор данных numy

1 Ответ

0 голосов
/ 13 октября 2018

Вы можете использовать np.unique и np.bincount:

>>> inp
array([['Purple Puffin', '1', '1'],
       ['Wisteria Wombat', '3', '4'],
       ['Pumpkin Pomeranian', '1', '3'],
       ['Wisteria Wombat', '2', '3'],
       ['Burgundy Bichon Frise', '2', '1'],
       ['Purple Puffin', '1', '4'],
       ['Wisteria Wombat', '2', '2'],
       ['Pumpkin Pomeranian', '1', '2']], dtype='<U21')
>>> unq, inv = np.unique(inp[:, 1::-1], axis=0, return_inverse=True)
>>> cnt = np.bincount(inv, inp[:, 2].astype(int)).astype(int)
>>> res = np.c_[unq[:, ::-1], cnt]
>>> res
array([['Pumpkin Pomeranian', '1', '5'],
       ['Purple Puffin', '1', '5'],
       ['Burgundy Bichon Frise', '2', '1'],
       ['Wisteria Wombat', '2', '5'],
       ['Wisteria Wombat', '3', '4']], dtype='<U21')
...