0

このコードの「n」コピーを作成する必要があります。

ccfarray1=[]
def ccf1(binnum):
    for i in datarange:
        ccf=((a[i]-xbar)*(c[(i-binnum)]-ybar))/(norm*stdevx*stdevy)
        parray.append(ccf)
        calc=sum(parray)
    ccfarray1.append(calc)
    del parray[:]
    return ccfarray1

たとえば、そのコピーの1つは次のとおりです。

ccfarray2=[]
def ccf2(binnum):
    for i in datarange:
        ccf=((a[i]-xbar)*(c[(i-binnum)]-ybar))/(norm*stdevx*stdevy)
        parray.append(ccf)
        calc=sum(parray)
    ccfarray2.append(calc)
    del parray[:]
    return ccfarray2

これにより、新しい配列が作成されるたびに、ccfarray'n'が作成されます。

これは20回くらい必要ですが、コピーと貼り付けがたくさんあります。これをコーディングするための洗練されたソリューションはありますか?必要な回数を変更する必要がある場合は、それが必要です。

私はそれらをビンとして扱っているので、私はこれらをたくさん必要とします。'binnum'が特定の範囲内にある場合、binnumが別の範囲内にある場合とは異なり、別の配列に追加する必要があります。

それ以上のコードなしでこれを行うことができるコードがある場合、それは問題ありませんが、私はそれを行う方法がわかりません!

4

1 に答える 1

0

関数で何をしたいのか完全にはわかりませんが、クロージャー内に関数を作成し、次のようにそれらをアイテムとしてリストに入れることができます。

def get_functions(count):
    ccfarrays=map(lambda: [], range(count))
    def get_nth_func(n):
        def ccf1(binnum):
            for i in datarange:
                ccf=((a[i]-xbar)*(c[(i-binnum)]-ybar))/(norm*stdevx*stdevy)
                parray.append(ccf)
                calc=sum(parray)
            ccfarray[n].append(calc)
            del parray[:]
            return ccfarray[n]
        return ccf1
    return map(get_nth_func, range(count)

したがって、20個の関数が必要な場合は、次のように作成します。

f = get_functions(20)

そして、このようにそれらを呼び出すよりも:

f[6](binnum)
于 2012-11-22T20:58:37.173 に答える