我的任务是,当输入为* 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
`
在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]
[]