我是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出错了。
能帮到我吗?非常感谢!
答案 0 :(得分:0)
我没有通过编写和运行一些代码来验证这个命题,但问题可能是string1[a_location[0]-1]
和/或string2[a_location[1]-1]
不是标量,实际上是向量(可能只有一个条目的向量)。因此,T.eq
和T.switch
的结果也是向量(正在广播T.switch
中的真/假标量值)。如果temp
是向量而dis_matrix[a_location[0], a_location[1]]
是标量,则inc_subtensor
可能会产生您看到的错误。