从具有相同形状和 dtype 的大型集合中查找唯一 numpy 数组的有效方法

Efficient way to find unique numpy arrays from a large set having the same shape and dtype

我有一大组 (~ 10000) numpy 数组,(a1, a2, a3,...,a10000)。每个数组具有相同的形状 (10, 12) 并且都是 dtype = int。在任何数组的任何行中,这 12 个值都是唯一的。

现在,有很多双倍数、三倍数等。我怀疑只有大约十分之一的数组实际上是唯一的(即:在相同位置具有相同的值)。

我能得到一些关于如何隔离唯一数组的建议吗?我怀疑 numpy.array_equal 会参与其中,但我对这种语言还很陌生,所以我正在为如何实现它而苦苦挣扎。

numpy.unique 可用于查找数组的唯一元素。假设您的数据包含在列表中;首先,堆叠数据以生成 3D 数组。然后执行np.unique找到唯一的二维数组:

import numpy as np

#  dummy list of numpy array to simulate your data
list_of_arrays = [np.stack([np.random.permutation(12) for i in range(10)]) for i in range(10000)]

#  stack arrays to form a 3D array
arr = np.stack(list_of_arrays) 

#  find unique arrays
unq = np.unique(arr, axis = 0)