Как уникально и суммировать ‘3-е same по одному и тому же '1-му, 2-му' массива в numpy - PullRequest
1 голос
/ 05 мая 2019

целевая форма данных (x, y, count).

[[   0  100    1]
 [   2  200    1]
 [   4  300    1]
 ]

У меня есть много точек с (x, y). И использую приведенный ниже код для подсчета очков, получая (x, y, z)

unique, counts = np.unique(data, axis=0, return_counts=True)
new_point_count = np.column_stack((unique, counts))

Теперь у меня есть другие данные. Как суммировать разные данные по python или numpy?

[[   0  100    1]
 [   2  200    3]
 [   4  400    1]
 ]

[[   1  100    1]
 [   2  200    10]
 [   3  300    5]
 ]

результат

[[   0  100    1]
 [   1  100    1]
 [   2  200    13]
 [   3  300    5]
 [   4  400    1]
 ]

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Предположим, у вас есть набор массивов данных {a1, a2, ..., an} .

Вы можете просто сложить массивы по вертикали перед вызовом "уникальной" функции.

SIZE = 10**6
a1 = np.random.randint(1, 10, (SIZE, 2))
a2 = np.random.randint(1, 10, (SIZE, 2))
c = np.vstack([a1, a2]) # a1, a2, ... - you data arrays 
unique, counts = np.unique(c, axis=0, return_counts=True)
new_point_count = np.column_stack((unique, counts))
0 голосов
/ 05 мая 2019

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

# Example
a = np.random.randint(0, 4, (4, 3))
b = np.random.randint(0, 4, (4, 3))
a
# array([[1, 3, 3],
#        [3, 0, 2],    <--
#        [2, 3, 1],
#        [3, 3, 0]])
b
# array([[3, 1, 0],
#        [3, 0, 3],    <-- 
#        [0, 1, 3],
#        [0, 3, 2]])

# combine
ab = np.r_[a, b]
# find uniques and label original data with index of their unique
unq, inv = np.unique(ab[:, :-1], axis=0, return_inverse=True)
# sum counts by index
np.c_[unq, np.bincount(inv, ab[:, -1]).astype(int)]
# array([[0, 1, 3],
#        [0, 3, 2],
#        [1, 3, 3],
#        [2, 3, 1],
#        [3, 0, 5],    <--
#        [3, 1, 0],
#        [3, 3, 0]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...