在多个numpy数组中查找相交的值

时间:2018-10-24 03:33:41

标签: python arrays numpy array-intersect

我有100个大型数组,每个数组250,000个元素。我想找到在这些数组中找到的通用值。我知道不会在所有100个数组中找到值,但是会在多个数组中找到少量值(我怀疑是10%至30%)。我想找到在这些阵列中频率最高的值。 (观点:数组没有重复项)

我知道我可以遍历数组并最终找到它们,但这需要一段时间。我也知道np.intersect1d函数,但是我只给出在所有数组中都可以找到的值,而我正在寻找的值只能在100个数组中的20个左右。

我最好的选择是使用np.intersect1d函数并遍历数组的所有可能组合,这肯定会花费一些时间,但不要仅仅遍历所有250,000 x 100的值。 示例:

array_1 = array([1.98,2.33,3.44,,...11.1)
array_2 = array([1.26,1.49,4.14,,...9.0)
array_2 = array([1.58,2.33,3.44,,...19.1)
array_3 = array([4.18,2.03,3.74,,...12.1)
.
.
. 
array_100= array([1.11,2.13,1.74,,...1.1)

在所有100个中没有值,是否可以在30个不同的数组中找到一个值?

1 个答案:

答案 0 :(得分:1)

您可以将np.uniquereturn_counts关键字一起使用,也可以使用香草Python Counter

如果您可以将阵列连接成一个250k x 100的整体结构,或者甚至将它们串接成另一个,则第一种方法有效:

unq, counts = np.unique(monolith, return_counts=True)
ind = np.argsort(counts)[::-1]
unq = unq[ind]
counts = counts[ind]

这将为您提供一个包含所有唯一值及其出现频率的数组。

如果阵列必须保持分开,请使用collections.Counter完成相同的任务。在下面,我假设您有一个包含数组的列表。拥有一百个单独命名的变量将是毫无意义的:

c = Counter()    对于数组中的arr:        c.update(arr)

现在c.most_common将为您提供最常见的元素及其数量。

相关问题