微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决两个列表之间的最少对数,有没有更快的方法?

我有两个(很长)的列表。我想找到列表中每对最小值的总和。例如,如果

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 生成器 和内置的 ma​​p 函数来避免创建列表,但这可能会稍微快一点(感谢 {{ 3}}):

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?