Python 在函数上循环时,有没有更快的方法返回多个值?

Python 在函数上循环时,有没有更快的方法返回多个值?,python,physics,Python,Physics,这能做得更快吗? 例如,在不同阶段追加值,或使用不同类型的循环 当前时间: positions=[]; velocities=[] for _ in range(1000): position, velocity = generateRandomVectors() positions.append(position) velocities.append(velocity) 速度很快,但我有很多向量要生成。您可以尝试使用模块中的方法: 如果没有numpy模块,可

这能做得更快吗? 例如,在不同阶段追加值,或使用不同类型的循环

当前时间:

positions=[];  velocities=[]

for _ in range(1000):   
    position, velocity = generateRandomVectors()
    positions.append(position)
    velocities.append(velocity)
速度很快,但我有很多向量要生成。

您可以尝试使用模块中的方法:

如果没有
numpy
模块,可以通过命令提示符命令

from numpy import split, array

position, velocity = split(array(tuple(generateRandomVectors() for _ in range(1000))), 2, 1)
您可以尝试使用模块中的方法:

如果没有
numpy
模块,可以通过命令提示符命令

from numpy import split, array

position, velocity = split(array(tuple(generateRandomVectors() for _ in range(1000))), 2, 1)

您应该尽可能多地使用矢量化

pip install numpy
每个回路2.19 ms±10.8µs(7次运行的平均值±标准偏差,每个100个回路)

如果不是每次调用生成一个向量,而是在一次调用中生成1000个向量,那么它在这里的运行速度要快15倍

def生成器域向量(n):
返回np.random.randn(n,3),np.random.randn(n,3)
位置、速度=生成向量(1000)
每个回路145µs±533 ns(7次运行的平均值±标准偏差,每个10000个回路)


一个区别是,现在位置和速度是数组而不是列表。这很好,因为您可以节省内存并执行批处理操作,如果您不尝试附加更多元素,这很好。

您应该尽可能多地使用矢量化

pip install numpy
每个回路2.19 ms±10.8µs(7次运行的平均值±标准偏差,每个100个回路)

如果不是每次调用生成一个向量,而是在一次调用中生成1000个向量,那么它在这里的运行速度要快15倍

def生成器域向量(n):
返回np.random.randn(n,3),np.random.randn(n,3)
位置、速度=生成向量(1000)
每个回路145µs±533 ns(7次运行的平均值±标准偏差,每个10000个回路)



一个区别是,现在位置和速度是数组而不是列表。这很好,因为您可以节省内存并执行批处理操作,如果您不尝试添加更多元素,这很好。

如果您正在寻找速度,python不是正确的工具……python不是完成了很多机器学习吗?你是说机器学习不需要速度吗?“0.04439204000018”-奇怪的是,对我来说,它只需要大约200倍的速度。非常奇怪。@NirAlfasi我不知道这是不是真的,但不管怎样,我问这个问题是因为我在语言上没有选择。@superbrain当然,当你用C/C++编写模块时,它会运行得更快。然而,我不相信这是OP所要求的。如果你在寻找速度,python不是正确的工具……python不是完成了很多机器学习吗?你是说机器学习不需要速度吗?“0.04439204000018”-奇怪的是,对我来说,它只需要大约200倍的速度。非常奇怪。@NirAlfasi我不知道这是不是真的,但不管怎样,我问这个问题是因为我在语言上没有选择。@superbrain当然,当你用C/C++编写模块时,它会运行得更快。然而,我不相信这是OP所要求的。如果没有额外的
重塑
,那么
np.random.randn(n,3)
如何呢?谢谢你的观察,我很难记住所有函数都接收多维大小或只接收元素数。自从你提到我会更新。嗯,有点失望,这没有使它更快。你的意思是删除额外的重塑?这对速度没有任何影响,因为它是相同的数据,只是以不同的方式查看。@user12750353非常感谢!当我记住这些信息时,我的最终计算(比我问题中的示例更复杂)大约快10倍。如果没有额外的
重塑
,那么
np.random.randn(n,3)
呢?谢谢你的观察,我很难记住所有函数都接收多维大小或只接收元素数。自从你提到我会更新。嗯,有点失望,这没有使它更快。你的意思是删除额外的重塑?这对速度没有任何影响,因为它是相同的数据,只是以不同的方式查看。@user12750353非常感谢!当我记住这些信息时,我的最终计算(比我问题中的例子更复杂)大约快10倍。