Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Python中数组的唯一性_Python_Arrays_Numpy - Fatal编程技术网

检查Python中数组的唯一性

检查Python中数组的唯一性,python,arrays,numpy,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],[1,0,0]。我想获得类似B=[[1,3],[2],[4,5]。 我能够使用双for循环验证每个数组的唯一性或相似性,如: for i in xrange(len(A)): for j in xrange(i+1,l

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

例如,如果
A=[[0,1,0],[0,0,1],[0,1,0],[1,0,0],[1,0,0],[1,0,0]。
我想获得类似
B=[[1,3],[2],[4,5]。

我能够使用双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)
但是,我不知道如何将数组的索引分组,这些索引在另一个列表、数组、矩阵或任何东西中相等


非常感谢您的建议。

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

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
开始,只需将其馈送到
枚举(…)
调用即可使用alter代码:

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)

这不是因为两个相等的总和是0:考虑<代码> [0,1] < /代码>和<代码> [1,0] < /代码>。这里的差异是
[-1,1]
,总结为
0
@WillemVanOnsem,感谢您指出了这一疏忽。我现在编辑了这个问题。
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> A=[[0,1,0],[0,0,1],[0,1,0],[1,0,0],[1,0,0]]
>>> 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)
... 
>>> B
[[1, 3], [2], [4, 5]]
import numpy_indexed as npi
npi.group_by(A).split(np.arange(len(A)))