遇到这个python代码的问题(如果你对变量名很好奇,那就处理来自midi文件的数据)。
song.getIntervals()
是各种整数的矩阵,例如:
[[-2,0,0,5,3],[2],[4,3,0]]
除了更长时间。
chrom
定义为:
def createIntfunc(a,b):
temp1={}
temp2={}
for x in range(a,b):
temp1[x]=0
for x in temp1:
temp2[x]=dict(temp1)
return temp2
chrom=createIntfunc(-17,18)
所以它是一个字典,其中键是整数,值是字典,其中包含键和值的整数。
以下是关注的代码:
for phrase in song.getIntervals():
for noteind in range(1,len(phrase)):
chrom[phrase[noteind-1]][phrase[noteind]]+=(1/float(sum([len(a) for a in song.getIntervals()])))
print sum([sum(a) for a in [b.values() for b in chrom.values()]])
打印一个接近0.8的值,具体取决于song.getIntervals()是什么。但是我不知道它怎么总是不会返回1.基本上我反复添加一个从零开始的值,这个值被定义为反之多次。我要添加它。所以它应该是0+(1 / x)* x = 1。
我没看到什么?
答案 0 :(得分:0)
这是你的问题:
“1 / x”的值实际上并没有加“x”次,因为循环内部没有运行“x”次。例如,当短语的长度仅为1时,“1 / x”不会被添加到字典中,因为内部循环仅在满足不等式1< = noteind< 1的索引上运行。 LEN(词组)。当len(短语)== 1时,没有索引可以满足这个不等式,因此循环内部不会执行。我不确定你的意图是做什么的,所以我不确定如何在不知道预期行为的情况下确切地解决它,但这就是为什么它以它的方式运行。