gpt4 book ai didi

python - 迭代两个或多个列表/numpy 数组...并将每个项目相互比较并避免 python 中的循环

转载 作者:行者123 更新时间:2023-11-28 21:26:19 25 4
gpt4 key购买 nike

我是 python 的新手,我的问题如下:

我已经定义了一个函数 func(a,b),它在给定两个输入值的情况下返回一个值。

现在我将数据存储在列表或 numpy 数组 A,B 中,并且想对每个组合使用 func。 (A和B的词条过百万)

ATM 我使用这个片段:

for p in A:
for k in B:
value = func(p,k)

这真的需要很多时间。

所以我在想也许是这样的:

C=(map(func,zip(A,B)))

但是这种方法只能成对使用……有什么想法吗?

感谢帮助

最佳答案

第一期

您需要为许多值对计算 f 的输出。加速这种循环(计算)的“标准”方法是让您的函数 f 接受 (NumPy) 数组作为输入,并立即对整个数组进行计算(即,不从 Python 中看到的循环)。查看任何 NumPy 教程以获得介绍。

第二期

如果 AB 各有超过一百万个条目,则有一万亿个组合。对于 64 位数字,这意味着您需要 7.3 TiB 的空间来存储计算结果。您有足够的硬盘来存储结果吗?

第三期

如果 AB 小得多,在您的特定情况下您可以这样做:

values = f(*meshgrid(A, B))

meshgrid返回 AB 的笛卡尔积,因此它只是一种生成必须计算的点的方法。

总结

  • 您需要有效地使用 NumPy 以避免 Python 循环。 (或者,如果所有其他方法都失败了或者它们不容易被矢量化,请用编译语言编写这些循环,例如使用 Cython )

  • 处理数 TB 的数据非常困难。您真的需要那么多数据吗?

  • 任何在循环中调用函数 f 1e12 次的解决方案必然会很慢,特别是在 CPython 中(这是默认的 Python 实现。如果您不确定并且你在使用 NumPy,你也在使用它)。

关于python - 迭代两个或多个列表/numpy 数组...并将每个项目相互比较并避免 python 中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13143052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com