Python fortran中带有替换函数的组合_?

Python fortran中带有替换函数的组合_?,python,fortran,combinatorics,itertools,Python,Fortran,Combinatorics,Itertools,我用python编写了一个小模块,用于获取符合y总成本的x产品的所有可能性。模块运行正常,但速度较慢。计算六个产品大约需要六个小时,每个产品最多需要30次迭代。所以,我想用FORTRAN重写脚本,看看是否能挤出更好的速度。不幸的是,我是FORTRAN新手,现在不了解大多数库等等 在FORTRAN中,是否有类似于python的itertools.compositions与替换(pool,r)的模块/函数,或者实现相同功能的模块?FWIW,对于与替换()的组合,有一个纯python等价物。它很简洁,

我用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重写该部分来提高速度(尽管你可以提高对每个组合所采取的操作的速度)。事实上,你是对的,先生。谢谢你帮我澄清。您是否知道如何计算所需的迭代次数?即使用你的方法,我还是要花很长时间。几分钟而不是几小时,但仍然值得一个进度条。我想你的下一步应该是退一步,想想你在用结果做什么。如果您不必具备所有的可能性,那么可能还有进一步优化的空间。另外,我的示例实现可以通过将其转换为生成器来改进。(这很简单,但我将把它作为练习留给读者。)