a = [['1', 'a'], ['2', 'b'], ['3', 'a'],['1', 'a'],['5', 'c'], ['6', 'b'], ['3', 'a']]
tup = [tuple(i) for i in a] # you need a list of tuples, a kludge for now
dt = [('f1', '<U5'), ('f2', '<U5')] # specify a dtype with two columns
b = np.array(tup, dtype=dt) # create the array with the dtype
np.unique(b) # get the unique values
array([('1', 'a'), ('2', 'b'), ('3', 'a'), ('5', 'c'), ('6', 'b')],
dtype=[('f1', '<U5'), ('f2', '<U5')])
np.unique(b).tolist() # and if you need a list, just change the array
[('1', 'a'), ('2', 'b'), ('3', 'a'), ('5', 'c'), ('6', 'b')]
参考:Find unique rows in numpy.array Joe金斯顿和Jaime的建议结合起来处理观点,上面的建议可以简化为以下内容。很好地,这个选项依赖于视图,将dtype更改为结构化数组,并使用结构化视图中唯一值的索引对原始数组进行切片。
4条答案
按热度按时间k3fezbri1#
给出:
您可以:
因为这是一个固定的理解,你失去了原来的顺序。
或者,为了维持秩序,您可以:
或者,如果你可以使用Pandas,这真的很容易。给定以下DataFrame:
使用
drop_duplicates()
:zyfwsgd62#
如果返回到原始列表格式数据并创建结构化数组,则确定唯一值要容易得多。
参考:Find unique rows in numpy.array
Joe金斯顿和Jaime的建议结合起来处理观点,上面的建议可以简化为以下内容。很好地,这个选项依赖于视图,将dtype更改为结构化数组,并使用结构化视图中唯一值的索引对原始数组进行切片。
ef1yzkbh3#
对于未来的读者来说,一种纯粹的numpy方法可以基于特定行/列删除重复项:
或多于一个列:
qpgpyjmq4#
如果有人仍然需要它,这里有一个一行程序:-)
请注意,这要求所有列值具有相同的dtype!