2024-09-29 02:21:38 发布
网友
我有两张(很长的)名单。我想找出列表中每一对的最小值之和。例如,如果
X = [2,3,4] Y = [5,4,2]
然后,总和将是2+3+2 = 7。 目前,我正在通过压缩列表并使用列表理解来实现这一点。我的列表是X和Y:
2+3+2 = 7
mins = [min(x,y) for x,y in zip(X,Y)] summed_mins = sum(mins)
这在我的程序中造成了严重的运行时问题。有没有更快的方法?列表理解是我所知道的最快的
您可以使用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数组。以下是一个例子:
np.stack
summed_mins = np.stack((np.array(a, np.int64), np.array(b, np.int64))).min(axis=0)
您可以使用Python生成器和内置的映射函数来避免创建列表,但这可能会稍微快一点(多亏了Veedrac):
或者,您可以使用Numpy。以下是如何:
如果可以将输入列表直接存储为Numpy数组,则速度会快得多。 如果您甚至可以将其直接存储在2D Numpy数组中,那么就不需要
np.stack
调用来生成更快的代码。 如果无法将输入直接存储/创建为Numpy数组,则可以通过指定数据类型(假设您确定列表包含小整数)快速创建Numpy数组。以下是一个例子:相关问题 更多 >
编程相关推荐