查找2D数组列中的重复值



我有一个形状如下的数组

(N, 2)下面是我手头的一个2d数组的例子:

[[0,2]
[0,3]
[1,2]
[1,3]
[1,4]]

我想获得第二个索引中所有重复的值。在上面的例子中,我希望返回值2和3。

对于这种任务是否有特定的np函数?

似乎是np的反义词。唯一的,但我还没有找到一个工作函数为这个问题。

您可以在第二列上建立索引,并使用np.bincount查找计数高于1的索引:

a = np.array([[0,2],
[0,3],
[1,2],
[1,3],
[1,4]])
np.flatnonzero(np.bincount(a[:,1])>1)
# array([2, 3], dtype=int64)

或者对于大整数,np.unique可能是更好的选择:

u, c = np.unique(a[:,1], return_counts=True)
u[c>1]
# array([2, 3])

您可能需要这样的内容:

arr = [[0,2],
[0,3],
[1,2],
[1,3],
[1,4]]

from collections import defaultdict
d = defaultdict(int)
for item in arr:
d[item[1]]+=1
for k, v in d.items():
if d[k] > 1:
print(k)

您可以使用来自集合的计数器来执行此任务。

z = np.array([[0,2],
[0,3],
[1,2],
[1,3],
[1,4]])

现在您可以遍历所需的索引以检查重复项。

from collections import Counter
dup = [item for item, count in Counter(z[:, 1]).items() if count > 1] 
print(dup)
Out[12]: [2, 3]

最新更新