你可以從輸入列表中收集所有這些數組到一個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數組列表? –
謝謝。最後,我想要一個數組列表,而不是字符串列表,但其他答案中的一個幫助。 –