假设我有:
x = [[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]]
我希望得到类似这样的输出:
count = [0, 1] = 2, [0, 2] = 2, [0, 3] = 1
如何计算发生了多少个数组?
答案 0 :(得分:4)
使用Counter类,如:
Counter(tuple(i) for i in x)
请注意,由于Counter
是dict
,因此密钥必须是可清除的。这就是需要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)
您可以尝试:
.count
:result = set((tuple(item), x.count(item)) for item in x)
print(result)
<强>结果强>:
{((0, 1), 2), ((0, 2), 2), ((0, 3), 1)}
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}
Counter
:from collections import Counter
result = list(Counter(map(tuple, x)).items())
print(result)
<强>结果强>:
[((0, 1), 2), ((0, 3), 1), ((0, 2), 2)]