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

2024-09-28 22:03:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有100个大数组,每个数组有250000个元素。我想找到在这些数组中找到的公共值。我知道不会在所有100个数组中都找到值,但会在多个数组中找到少量值(我怀疑是10-30%)。我想找出这些数组中频率最高的值。(边点:数组没有重复项)

我知道我可以在数组中循环并最终找到它们,但这需要一段时间。我也知道np.intersect1d函数,但我只给出在所有数组中找到的值,而我只寻找在100个数组中大约20个数组中找到的值。你知道吗

我的最佳选择是使用np.intersect1d函数并循环遍历所有可能的数组组合,这肯定需要一段时间,但不会像循环遍历所有250000x100值那样长。 示例:

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个不同的数组中找到?你知道吗


Tags: 函数元素示例np数组array频率intersect1d
1条回答
网友
1楼 · 发布于 2024-09-28 22:03:37

可以将^{}return_counts关键字一起使用,也可以使用普通Python ^{}。你知道吗

如果您可以将阵列串联成一个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=计数器() 对于阵列中的arr: c、 更新(arr)

现在^{}将给出最常见的元素及其计数。你知道吗

相关问题 更多 >