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

标签 python arrays numpy array-intersect

我有 100 个大型数组,每个数组包含 250,000 个元素。我想找到这些数组中的共同值。我知道不会在所有 100 个数组中找到值,但会在多个数组中找到少量值(我怀疑是 10-30%)。我想找出这些数组中出现频率最高的值。 (旁白:数组没有重复项)

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

我最好的选择是使用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个不同的数组中找到?

最佳答案

您可以使用np.unique使用 return_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.更新(arr)

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

关于python - 查找多个 numpy 数组中的相交值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960713/

相关文章:

python - 使用 Python (BeautifulSoup 4) 的网络抓取工具不起作用

Python - 计算日期范围内的唯一标签

python - Grepl(R)函数类似Python中的用法

python - Numpy(稀疏)重复索引增量

python - 从 NumPy 数组创建 Python 字节数组时,额外数据从何而来?

python - Pandas:删除具有相同 "rounded"值的重复行而不创建新列

c - 如何在 C 中创建多维动态分配数组?

php - array_intersect,但对于单个数组变量的子数组

ios - 单击打开 url 时如何修复 "Struct"以包含 UIButton?

python - Numpy 求复共轭