我有一个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)
但后来我不知道如何在另一个列表,数组,矩阵或其他内容中对它们之间相等的数组的索引进行分组。
非常感谢您的任何建议。
答案 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)))