使用for循环,索引超出范围python

时间:2018-02-25 21:24:52

标签: python numpy for-loop indexing

我正在解决需要为上下文模型开发代码的问题:  P(A | X)=Σa∈A(X,A)/Σa∈A(X,A)+Σb∈B(X,B) 计算新刺激x属于A类的概率.S是我之前定义的相似函数:

def calculate_similarity(x, y, theta=0.1):
    return (np.prod([1 if x[i] == y[i] else theta for i in range(len(x))])) 

该函数接受测试刺激,范例,范例名称和theta,并希望我们返回每个刺激属于A的概率数组。

def context_model(test_stimuli, exemplars, exemplar_categories, theta=0.1):

我知道我应该迭代每个测试刺激并计算它与样本之间的相似性 - 我甚至可以通过样本类别名称" A"和" B",但是当我运行我的代码时,我得到了索引错误。

result = []
a_data = np.argwhere(exemplar_categories == 'A')
b_data = np.argwhere(exemplar_categories == 'B')
for x in test_stimuli: 
    a = [calculate_similarity(x, exemplars[i, :], theta) for a_data[i] in range(0, len(a_data))]
    b = [calculate_similarity(x, exemplars[i, :], theta) for b_data[i] in range(0, len(b_data))]
    final = sum(a)/ (sum(a) + sum(b))
    result = np.append(result, final)
return result

当我跑步时,

stimuli = np.array([
[1, 1, 1, 1, 0],
[0, 0, 1, 1, 0],
[1, 0, 0, 1, 1],
[1, 1, 0, 1, 1]])
exemplars = np.array([
[0, 0, 1, 0, 1],
[0, 1, 1, 1, 0],
[1, 0, 0, 0, 1],
[0, 0, 1, 1, 1],
[0, 0, 1, 0, 0],
[1, 0, 0, 1, 1]])
exemplar_categories = np.array(['B', 'A', 'B', 'B', 'B', 'A'])
context_model(stimuli, exemplars, exemplar_categories, theta=0.1)

我得到声明"索引2超出轴0的大小为2

我已经解决了这个问题好几天了,不知道从哪里开始。我尝试将该函数应用于刺激中的每个X,然后解析出A和B数据,但没有任何工作。

任何帮助将不胜感激!!我还不熟悉编码,这个问题让我发疯了。

0 个答案:

没有答案