【问题标题】:Find intersecting values in multiple numpy arrays在多个 numpy 数组中查找相交值
【发布时间】:2019-03-28 09:07:24
【问题描述】:

我有 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 个不同的数组中找到?

【问题讨论】:

  • 所有数组的大小都一样吗?你能拥有一个 250k x 100 的大阵列吗?
  • 不,它们不是,通常在 220,000-280,000 之间

标签: python arrays numpy array-intersect


【解决方案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 = 计数器() 对于数组中的 arr: c.update(arr)

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

【讨论】:

  • 好主意!谢谢你的回复,我试试看!
  • @丹尼。更新
  • 正确的感谢方式是通过单击旁边的复选标记来选择答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多