TypeError:尝试使用1维值递增0维子指标

时间:2016-01-18 04:52:57

标签: python theano

我是python中的新人,这些天我编写theano并遇到困扰我很多天的问题,我的代码如下:

import theano.tensor as T

def compute_distance(location, dis_matrix, string1, string2, len1, lent):
def assign_distance(a_location, dis_matrix, string1, string2, len1, len2):
    temp = T.switch(T.eq(string1[a_location[0]-1], string2[a_location[1]-1]), 0, 10)
    dis_matrix=T.inc_subtensor(dis_matrix[a_location[0], a_location[1]], temp)
return dis_matrix, temp

result, updates = theano.scan(fn=assign_distance,
                              outputs_info=[dis_matrix, None],
                              sequences=location,
                              non_sequences=[string1, string2, len1, len2])
return result[0][-1], result[1]

我要做的是将基于string1和string2的值分配给dis_matrix中的某个单元格,我使用条件T.switch(T.eq(string1 [a_location [0] -1],string2 [a_location [1] ] -1])来决定temp的值,这样我就可以把temp放到dis_matrix中了,但是当我运行这段代码时,我得到了错误:

  

TypeError:尝试使用1维值递增0维子指标。

T.switch似乎返回的不是标量而是1-dim向量,如果我将dis_matrix=T.inc_subtensor(dis_matrix[a_location[0], a_location[1]], temp)更改为dis_matrix=T.inc_subtensor(dis_matrix[a_location[0], a_location[1]], 0),此代码效果很好,所以我认为它必须是T.switch出错了。

能帮到我吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

我没有通过编写和运行一些代码来验证这个命题,但问题可能是string1[a_location[0]-1]和/或string2[a_location[1]-1]不是标量,实际上是向量(可能只有一个条目的向量)。因此,T.eqT.switch的结果也是向量(正在广播T.switch中的真/假标量值)。如果temp是向量而dis_matrix[a_location[0], a_location[1]]是标量,则inc_subtensor可能会产生您看到的错误。