在python中应用递归函数时出错

问题描述 投票:0回答:1

我写了附件功能其中prob1和prob2是5 * 5的numpy数组,其中包含0到1之间的随机数; iri是一个141长的numpy数组,其中包含从1到5的整数; tme是1。乘以prob1[tme, i] * cond_arr[j]由于某些原因,cond_arr[j]开始具有非常大的数字10 ^ 25,而它应该具有0到1之间的随机数。任何想法代码有什么问题谢谢

def multiplication(iri, tme):
    ind_arr = array([1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3,
                     3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5])
    cond_arr = zeros(ind_arr.shape[0])
    prob1 = get_prob_gvn_cond(iri[0])
    prob2 = get_prob_gvn_cond(iri[1])
    for i in range(0, prob1.shape[1]):
        for j in range(0, prob2.shape[1]):
            cond_arr[list(ind_arr).index(round(0.5 * (i + j + 2), 1)) - 1] += prob1[tme, j] * prob2[tme, i]
    print(cond_arr)
    for element_cond in range(2, 140):
        prob1 = get_prob_gvn_cond(iri[element_cond])
        for i in range(0, prob1.shape[1]):
            for j in range(0, ind_arr.shape[0]):
                cond_arr[list(ind_arr).index(round(0.5 * (i + ind_arr[j] + 1), 1)) - 1] += prob1[tme, i] * cond_arr[j]
    return cond_arr
python recursion pycharm
1个回答
0
投票

这就是我说的时候,您应该中断冗长的调试代码的意思。它与您的功能相同,只是我在IDE中使用了重构功能来分解长行。现在,您可以通过逐步调试函数并检查中间变量的值来调试功能,以查看意外结果来自何处。

def multiplication(iri, tme):
    ind_arr = array([1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3,
                     3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5])
    cond_arr = zeros(ind_arr.shape[0])
    prob1 = get_prob_gvn_cond(iri[0])
    prob2 = get_prob_gvn_cond(iri[1])
    a = prob1.shape[1]
    for i in range(0, a):
        b = prob2.shape[1]
        for j in range(0, b):
            d = round(0.5 * (i + j + 2), 1)
            c = list(ind_arr).index(d) - 1
            e = prob1[tme, j]
            f = prob2[tme, i]
            g = e * f
            cond_arr[c] += g

    print(cond_arr)

    for element_cond in range(2, 140):
        h = iri[element_cond]
        prob1 = get_prob_gvn_cond(h)
        m = prob1.shape[1]
        for i in range(0, m):
            n = ind_arr.shape[0]
            for j in range(0, n):
                t = 0.5 * (i + ind_arr[j] + 1)
                o = round(t, 1)
                p = list(ind_arr).index(o) - 1
                q = prob1[tme, i]
                r = cond_arr[j]
                s = q * r
                t = cond_arr[p]
                u = t + s
                cond_arr[p] = u

    return cond_arr
© www.soinside.com 2019 - 2024. All rights reserved.