python - 两个列表之间的最小对,有更快的方法吗?
问题描述
我有两个(很长)列表。我想找到列表中每对的最小值的总和。例如,如果
X = [2,3,4]
Y = [5,4,2]
那么,总和将是2+3+2 = 7
。目前,我通过压缩列表并使用列表理解来做到这一点。我的清单是 X 和 Y:
mins = [min(x,y) for x,y in zip(X,Y)]
summed_mins = sum(mins)
这导致我的程序出现严重的运行时问题。有没有更快的方法来做到这一点?列表推导是我所知道的最快的。
解决方案
您可以使用Python 生成器和内置的map函数来避免创建列表,但这可能会稍微快一点(感谢Veedrac):
summed_mins = sum(map(min, x, y))
或者,您可以使用Numpy。方法如下:
summed_mins = np.stack((X, Y)).min(axis=0).sum()
如果您可以将输入列表直接存储为 Numpy 数组,则速度会快得多。如果您甚至可以将其直接存储在 2D Numpy 数组中,则不需要np.stack
调用,从而获得更快的代码。如果您不能将输入直接存储/创建为 Numpy 数组,您可以通过指定数据类型快速创建 Numpy 数组(假设您确定列表包含小整数)。这是一个例子:
summed_mins = np.stack((np.array(a, np.int64), np.array(b, np.int64))).min(axis=0)
推荐阅读
- python - Python Regex - 用另一个单词替换特定单词(没有哈希)
- firebase-realtime-database - ESP8266 无法从 Google Firebase 读取数据
- python - Python 列表乘法
- python - 反向链表 - 如何删除(输出)末尾的“无”
- c# - 自定义 Xamarin.Forms.Datepicker 以选择和可视化多个日期
- java - 在 JavaFX 中格式化动态添加的标签
- python - Python_Cookbook_3rd_Edition 6.12 一个问题
- java - 当我需要使用两列时如何使用@oneToMany
- r - 对多列进行多次更改的 R 函数
- python - 神经网络 - 以向量为中心的 Python 实现