python的未定义元组的TypeError

时间:2018-07-08 04:28:09

标签: python python-2.7 list numpy tuples

我正在制作我的python程序。以下是我的代码,它返回:

File "relation.py", line 134, in <module>
    k = z1[i][0] = sampling(a[l, :], b[l, :], z1_sum[i], alpha[l, :], k_l)
TypeError: list indices must be integers, not tuple

在我的代码(在下面)中,我没有定义任何元组。所以我不知道这段代码是什么问题。

import random
import numpy as np
import math



def sampling(a, b, I, alpha, length):
    summary = 0
    N = len(alpha)
    for i in range(N):
        A = math.gamma(a[i] + I[i]) * math.gamma(b[i] + length - I[i]) / math.gamma(a[i] + b[i] + I[i])
        B = math.gamma(a[i] + b[i]) / (math.gamma(a[i]) * math.gamma(b[i]))
        value = alpha[i] * A * B
        summary += value
        result.append(value)


    choose = random.randomrange(summary)

    num = N - 1

    for i in range(N):
        choose -= result[i]
        if choose < 0:
            num = i
            break

    return num

def delta(x, y):
    if x == y:
        return 1
    return 0

data = []

print("please input (k, l):")
num = map(int, raw_input().split())

k_l = k = num[0]
l_l = l = num[1]

param_p = [[0 for i in range(k)] for j in range(l)]
param_n = [[0 for i in range(k)] for j in range(l)]
param_k = [0] * k
param_l = [0] * l
count = 1000

print("please input (N1, N2):")
number = map(int, raw_input().split())
N1 = number[0]
N2 = number[1]

random.randint(50, 100)
z1 = []
z2 = []
z1_sum = [2 for i in range(N1)]
z2_sum = [2 for i in range(N2)]

value = 0

alpha = [[2 for i in range(k)] for j in range(l)]
a = np.array([[2 for i in range(k)] for j in range(l)])
b = np.array([[2 for i in range(k)] for j in range(l)])

for i in range(N1):
    z1.append([value, i],)
    if i % k == k - 1:
        value = 0
    else:
        value += 1

value = 0

for i in range(N2):
    z2.append([value, i],)
    if i % l == l - 1:
        value = 0
    else:
        value += 1

print(z1)
print(z2)

print("please input relation-data:")

for i in range(N2):
    line = map(int, raw_input().split())
    data.append(line)

print(data)

param_p[0][0] = -1
print(param_p[1][0])
param_p[0][0] = 0


for i in range(N2):
    l = z2[i][0]
    for j in range(N1):
        k = z1[j][0]
        z1_sum[i] += data[i][j]
        z2_sum[j] += data[i][j]
        param_p[l][k] += data[i][j]
        param_n[l][k] += 1 - data[i][j]
        param_k[k] += data[i][j]
        param_l[l] += data[i][j]        

print(param_p)
print(param_n)
print(param_k)
print(param_l)

#sampling(a, b, I, alpha, length)

k = 0
l = 0

for n in range(count):
    for i in range(N1):
        temp = z1[i][0]
        for j in range(l_l):
            alpha[j][temp] += param_l[j]
            a[j][temp] += param_p[j][temp]
            b[j][temp] += param_n[j][temp]

            I = delta(z1[i][0], temp)

            param_p[j][temp] -= z1_sum[i] * I
            param_n[j][temp] -= (k_l - z1_sum[i]) * I
            param_l[j] -= I

        k = z1[i][0] = sampling(a[l, :], b[l, :], z1_sum[i], alpha[l, :], k_l)
        for j in range(l_l):
            alpha[j][temp] -= param_l[j]
            a[j][temp] -= param_p[j][temp]
            b[j][temp] -= param_n[j][temp]

            I = delta(z1[i][0], k)

            param_p[j][k] += z1_sum[i] * z1_sum[i] * I
            param_p[j][k] += (k_l - z1_sum[i]) * z1_sum[i] * I
            param_l[j] += z1_sum[i] * I

    for i in range(N2):
        temp = z2[i][0]
        for j in range(k_l):
            alpha[temp][j] += param_k[j]
            a[temp][j] += param_p[temp][j]
            b[temp][j] += param_n[temp][j]

            I = delta(z2[i][0], temp)

            param_p[temp][j] -= z2_sum[i] * I
            param_n[temp][j] -= (l_l - z2_sum[i]) * I
            param_k[j] -= I

        l = z2[i][0] = sampling(a[:, k], b[:, k], z2_sum[i], alpha[:, k], l_l)
        for j in range(k_l):
            alpha[temp][j] -= param_k[j]
            a[temp][j] -= param_p[temp][j]
            b[temp][j] -= param_n[temp][j]

            I = delta(z2[i][0], l)

            param_p[l][j] += z2_sum[i] * I
            param_n[l][j] += (l_l - z2_sum[i]) * I
            param_k[j] += I

    print("Hello")  

print(z1)
print(z2)

如您所见,我只定义了numpy,而a [l,:]根本不是元组。所有的内容,都没有元组的繁琐。只有列表元素在这里。为什么python返回有关元组的错误。

1 个答案:

答案 0 :(得分:0)

多亏了anernert,我终于知道问题出在哪里。 这是因为当我实际上是一个numpy时,我使用的是numpy-array

这是我的代码已编辑

------WebKitFormBoundarynBsAcX7rJhOGsmfY
Content-Disposition: form-data; name="fdata"; filename="blob"
Content-Type: application/json

{"firstname":"saurabh","lastname":"mishra","mobile":"943847557"}
------WebKitFormBoundarynBsAcX7rJhOGsmfY
Content-Disposition: form-data; name="files"; filename="download.jpg"
Content-Type: image/jpeg


------WebKitFormBoundarynBsAcX7rJhOGsmfY--