Как посчитать, сколько массивов произошло в массивах np? - PullRequest
0 голосов
/ 21 мая 2018

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

x = [[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]]

и я хочу получить что-то вроде этого:

count = [0, 1] = 2, [0, 2] = 2, [0, 3] = 1

Как подсчитать, сколько массивов произошло?

Ответы [ 5 ]

0 голосов
/ 21 мая 2018

Вы можете попробовать:

1.Использование .count:


result = set((tuple(item), x.count(item)) for item in x)
print(result)

Результат :

{((0, 1), 2), ((0, 2), 2), ((0, 3), 1)}

2.Использование defaultdict:


from collections import defaultdict

result = defaultdict(int)
for item in x:
    result[tuple(item)] += 1

print(dict(result))

Результат :

{(0, 1): 2, (0, 3): 1, (0, 2): 2}

3.Использование Counter:


from collections import Counter

result = list(Counter(map(tuple, x)).items())
print(result)

Результат :

[((0, 1), 2), ((0, 3), 1), ((0, 2), 2)]
0 голосов
/ 21 мая 2018

Если вы ищете чисто решение для numpy:

In [12]: import numpy as np

In [13]: x = np.array([[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]])

In [14]: np.unique(x, axis=0, return_counts=True)
Out[14]: 
(array([[0, 1],
        [0, 2],
        [0, 3]]), array([2, 2, 1]))
0 голосов
/ 21 мая 2018

Следующий код решит это

print({str(i):x.count(i) for i in x})
0 голосов
/ 21 мая 2018

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

In []:
np.unique(x, axis=0, return_counts=True)

Out[]:
(array([[0, 1],
        [0, 2],
        [0, 3]]), array([2, 2, 1]))

Если вы хотите свернуть их, вы можете использовать zip(), например:

In []:
list(zip(*np.unique(x, axis=0, return_counts=True)))

Out[]:
[(array([0, 1]), 2), (array([0, 2]), 2), (array([0, 3]), 1)]
0 голосов
/ 21 мая 2018

Используйте класс Counter , например:

Код:

Counter(tuple(i) for i in x)

Обратите внимание, что, поскольку Counter является dict, ключи должны бытьhashable.Вот почему необходим tuple(i) for i in x, поскольку он преобразует списки в x в кортежи, чтобы их можно было использовать в качестве ключей для Counter.

Тестового кода:

x = [[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]]

from collections import Counter
print(Counter(tuple(i) for i in x))

Результаты:

Counter({(0, 1): 2, (0, 2): 2, (0, 3): 1})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...