
我一直在尝试用python编程一个数学公式。代码正在运行,但我坚信这些代码并不能反映实际的数学公式,但我迷失了方向,不知道自己哪里会出错。下面是我的代码,我已经附上了实际的数学公式。请检查python代码是否与数学公式-if不匹配,请帮助了解我出错的地方。我真的很迷茫。
## Inter cluster distance
inter = 0
for i in range(centr.shape[1]-1):
for j in range(i+1,centr.shape[1]):
for l in range(centr.shape[0]):
inter = inter + (centr[l][i]-centr[l][j])**2
print('Intercluster distance: '+ str(inter))
## Intra cluster cluster
intra = 0
for i in range(data.shape[0]):
for j in range(centr.shape[0]):[enter image description here][2]
intra = intra + (data[i][j] - centr[j][Cc[i]-1])**2
print('Intracluster distance: '+ str(intra))


发布于 2020-06-23 10:25:46
观察range构造函数的工作方式:
>>> list(range(3))
[0, 1, 2]
>>> list(range(1, 3))
[1, 2]因此,默认的开始值是0,并且永远不包括停止值。因此,您需要稍微不同的开始值和停止值。
此外,与您给出的公式相比,代码中的矩阵元素z的索引可能都是1单位,因为Python的工作原理类似于range,从0开始,而在公式中它们显然从1开始。
例如,对于簇间距离,我们应该有以下代码:
## Inter cluster distance
inter = 0
for i in range(1, centr.shape[1]):
for j in range(i+1, centr.shape[1] + 1):
for l in range(1, 3 + 1):
inter = inter + (centr[l - 1][i - 1] - centr[l - 1][j - 1])**2
print('Intercluster distance: '+ str(inter))或者,可以使索引i, j, l全部缩小一个单位,并相应地对z值进行索引,这将产生相同的结果:
## Inter cluster distance
inter = 0
for i in range(centr.shape[1] - 1):
for j in range(i, centr.shape[1]):
for l in range(3):
inter = inter + (centr[l][i] - centr[l][j])**2
print('Intercluster distance: '+ str(inter))https://stackoverflow.com/questions/62531831
复制相似问题