你可以从输入列表中收集所有这些数组到一个NumPy数组中。然后,它将以连续的顺序带来所有重复的行。然后,沿行进行分化,给我们全部为零的重复行,这可以使用(sorted_array==0).all(1)
来提取。这会给你一个重复起始位置的掩码,它可以用来从连接数组中选择元素。最后,选定的元素被重新整形并通过沿着第一个轴分割返回到数组格式列表。因此,你将有一个量化的实现,像这样 -
A = numpy.concatenate((arrays)).reshape(-1,arrays[0].size)
sortedA = A[numpy.lexsort(A.T)]
idx = numpy.append(True,~(numpy.diff(sortedA,axis=0)==0).all(1))
out = numpy.vsplit((A.reshape((len(arrays),) + arrays[0].shape))[idx],idx.sum())
样品输入,输出 -
In [238]: arrays
Out[238]:
[array([[0, 1],
[1, 0]]), array([[1, 1],
[1, 1]]), array([[1, 1],
[1, 0]]), array([[0, 1],
[0, 0]]), array([[0, 0],
[0, 1]]), array([[0, 1],
[1, 0]]), array([[0, 1],
[1, 1]]), array([[1, 0],
[1, 0]]), array([[1, 0],
[1, 1]]), array([[0, 1],
[1, 0]])]
In [239]: out
Out[239]:
[array([[[0, 1],
[1, 0]]]), array([[[1, 1],
[1, 1]]]), array([[[1, 1],
[1, 0]]]), array([[[0, 1],
[1, 0]]]), array([[[0, 1],
[1, 1]]]), array([[[1, 0],
[1, 0]]]), array([[[1, 0],
[1, 1]]]), array([[[0, 1],
[1, 0]]])]
你看看这里:http://stackoverflow.com/questions/27751072/removing-duplicates从一个numpy数组列表? –
谢谢。最后,我想要一个数组列表,而不是字符串列表,但其他答案中的一个帮助。 –