两个列表之间的最小成对数,有没有更快的方法?

2024-09-29 02:21:38 发布

您现在位置: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)

这在我的程序中造成了严重的运行时问题。有没有更快的方法?列表理解是我所知道的最快的


Tags: 方法in程序列表forzipminsum
1条回答
网友
1楼 · 发布于 2024-09-29 02:21:38

您可以使用Python生成器和内置的映射函数来避免创建列表,但这可能会稍微快一点(多亏了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)

相关问题 更多 >