如何计算np数组中出现的阵列数?

时间:2018-05-21 03:01:36

标签: python python-3.x python-2.7

假设我有:

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

我希望得到类似这样的输出:

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

如何计算发生了多少个数组?

5 个答案:

答案 0 :(得分:4)

使用Counter类,如:

代码:

Counter(tuple(i) for i in x)

请注意,由于Counterdict,因此密钥必须是可清除的。这就是需要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})

答案 1 :(得分:2)

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)]

答案 2 :(得分:1)

如果您正在寻找纯粹的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]))

答案 3 :(得分:0)

以下代码将解决它

print({str(i):x.count(i) for i in x})

答案 4 :(得分:0)

您可以尝试:

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)]