Python получить значение p массива - PullRequest
0 голосов
/ 20 апреля 2020

Моя задача состоит в том, чтобы при вводе * X каждый вход представлял собой массив из одного столбца с n строками, но они могут иметь разные строки (например, X [0] - это массив с 1 столбцом и 10 строками, а X [2] с 1 столбцом и 9 строками), я хочу, чтобы код подсчитывал p-значение каждых двух массивов и получал наименьшее p-значение и порядок X [n] (например, X [1] означает первый массив и тд). Код работает неправильно: «локальная переменная ans_1 перед присвоением». Я не знаю, как это сделать.

def mass_independent_ttest(*X):
    min_pvalue = 10
    for i in range(0, len(X)):
        for j in range(i+1, len(X)):
            df_1 = pd.DataFrame(X[i])
            df_2 = pd.DataFrame(X[j])
            df_first = df_1.loc[:,0]
            df_second = df_2.loc[:,0]
            temp = scipy.stats.ttest_ind(df_first, df_second)
            temp_pvalue = temp.pvalue
            if temp_pvalue < min_pvalue:
                min_pvalue = temp_pvalue
                ans_1 = i
                ans_2 = j
    ans_tuple = (ans_1, ans_2, min_pvalue)
    return ans_tuple

`

1 Ответ

0 голосов
/ 21 апреля 2020

На последней итерации i, range(i+1, len(X)) будет пустым списком, поэтому код не будет выполняться, а ans_1 и ans_2 не существует при вызове ans_tuple = (ans_1, ans_2, min_pvalue). Поэтому вы должны оценить свои внешние и внутренние циклы, чтобы увидеть, получаете ли вы ожидаемое количество итераций.

Этот пример показывает концептуально, что происходит.

for i in range(0, len(X)):
    print(list(range(i+1, len(X))))

=== Output: ===
[1, 2, 3, 4]
[2, 3, 4]
[3, 4]
[4]
[]
...