Python fortran中带有替换函数的组合_?
我用python编写了一个小模块,用于获取符合Python fortran中带有替换函数的组合_?,python,fortran,combinatorics,itertools,Python,Fortran,Combinatorics,Itertools,我用python编写了一个小模块,用于获取符合y总成本的x产品的所有可能性。模块运行正常,但速度较慢。计算六个产品大约需要六个小时,每个产品最多需要30次迭代。所以,我想用FORTRAN重写脚本,看看是否能挤出更好的速度。不幸的是,我是FORTRAN新手,现在不了解大多数库等等 在FORTRAN中,是否有类似于python的itertools.compositions与替换(pool,r)的模块/函数,或者实现相同功能的模块?FWIW,对于与替换()的组合,有一个纯python等价物。它很简洁,
y
总成本的x
产品的所有可能性。模块运行正常,但速度较慢。计算六个产品大约需要六个小时,每个产品最多需要30次迭代。所以,我想用FORTRAN重写脚本,看看是否能挤出更好的速度。不幸的是,我是FORTRAN新手,现在不了解大多数库等等
在FORTRAN中,是否有类似于python的itertools.compositions与替换(pool,r)的模块/函数,或者实现相同功能的模块?FWIW,对于与替换()的组合,有一个纯python等价物。它很简洁,翻译成Fortran应该不难
def combinations_with_replacement(iterable, r):
# combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
pool = tuple(iterable)
n = len(pool)
if not n and r:
return
indices = [0] * r
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
if indices[i] != n - 1:
break
else:
return
indices[i:] = [indices[i] + 1] * (r - i)
yield tuple(pool[i] for i in indices)
不要那样做。当您需要进行算法优化时,您正在尝试进行微观优化。这就是为什么我根据itertools与你争论,但是a。谢谢,我正在考虑这个问题。我只是想不重写轮子-PI同意重新认证。如果你真的不需要检查所有可能的替换组合,那么它是值得避免的。另外,CPython的组合_和替换_是用C写的,所以你不会通过用Fortran重写该部分来提高速度(尽管你可以提高对每个组合所采取的操作的速度)。事实上,你是对的,先生。谢谢你帮我澄清。您是否知道如何计算所需的迭代次数?即使用你的方法,我还是要花很长时间。几分钟而不是几小时,但仍然值得一个进度条。我想你的下一步应该是退一步,想想你在用结果做什么。如果您不必具备所有的可能性,那么可能还有进一步优化的空间。另外,我的示例实现可以通过将其转换为生成器来改进。(这很简单,但我将把它作为练习留给读者。)