【问题标题】:Complex math formula Python复杂的数学公式 Python
【发布时间】:2020-06-23 09:45:12
【问题描述】:

我一直在尝试用python编写一个数学公式。代码正在运行,但我坚信代码没有反映实际的数学公式,但我迷失了方向,不知道哪里出了问题。下面是我的代码,我附上了实际的数学公式。请检查 python 代码是否与数学公式匹配 - 如果不匹配,请协助我出错的地方。老实说,我很迷茫。

## 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))

Math equation intra-cluster distance Mth equation inter-cluster distance

My code in python

【问题讨论】:

    标签: python math cluster-analysis equation


    【解决方案1】:

    观察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))
    

    【讨论】:

    • 您好 Arne,感谢您解释范围的工作原理。现在很清楚了。我已经应用了所示的公式。我确认 centr.shape 是 (15,5),其中 5 代表簇数 (K)。但我收到一个错误:----> 6 inter = inter + (centr[l][i]-centr[l][j])**2。 IndexError:索引 5 超出轴 0 的范围,大小为 5
    • 感谢@Kate 的反馈。我根据您的评论编辑了我的答案。
    • 非常感谢 Arne,代码正在运行,而且结果更好。我仍然需要仔细研究它才能完全掌握这个概念——你如何解释这个范围非常有帮助。有了这个清晰,我希望我可以解决集群内公式。非常感谢。
    • 谢谢@Kate,很高兴能帮上忙。
    • 嗨@Arne,我有一个简单的问题。我已按照您的建议应用了该公式及其工作原理。它实际上在 centr 是多维数组的情况下工作,例如 centr.shape = (15,5) 其中 15 是列/特征的数量,5 是 K。但是当 centr.shape 是 (2,5) 时我遇到了一个问题。我收到错误“IndexError:索引 2 超出轴 0 大小为 2 的范围”。请你帮我解决这个问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多