检查Python中数组的唯一性

时间:2017-01-26 13:52:07

标签: python arrays numpy

我有一个numpy数组列表。每个数组是一系列二进制值,例如[0,1,1,0,1,0]。我想比较列表中的所有数组,并获得另一个列表,其中数组的所有索引具有完全相同的数字序列。

例如,如果A=[[0,1,0],[0,0,1],[0,1,0],[1,0,0],[1,0,0]]我希望获得类似B = [[1,3],[2],[4,5]]的内容。

我可以使用double for循环验证每个数组的唯一性或相似性,如:

for i in xrange(len(A)):
    for j in xrange(i+1,len(A)):
        if (A[i]==A[j]).all():
            print 'Duplicate of arrays %d and %d' %(i,j)

但后来我不知道如何在另一个列表,数组,矩阵或其他内容中对它们之间相等的数组的索引进行分组。

非常感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

您可以简单地使用字典方法:

dic = {}
B = []
for idx,row in enumerate(A):
    trow = tuple(row)
    if trow not in dic:
        dic[trow] = len(dic)
        B.append([idx])
    else:
        B[dic[trow]].append(idx)

请注意,索引从 0 开始,如果您希望索引从1开始,您只需将代码转换为{ {1}}致电:

enumerate(..)

产生dic = {} B = [] for idx,row in enumerate(A,1): trow = tuple(row) if trow not in dic: dic[trow] = len(dic) B.append([idx]) else: B[dic[trow]].append(idx)

result

答案 1 :(得分:0)

import numpy_indexed as npi
npi.group_by(A).split(np.arange(len(A)))