在python中使用scipy的kmeans2函数

 谁的淡笑丶_227 发布于 2023-02-14 00:27

我发现这在使用Python kmeans2算法的例子.我不能得到以下部分

# make some z vlues
z = numpy.sin(xy[:,1]-0.2*xy[:,1])

# whiten them
z = whiten(z)

# let scipy do its magic (k==3 groups)
res, idx = kmeans2(numpy.array(zip(xy[:,0],xy[:,1],z)),3)

要点是zip(xy[:,0],xy[:,1]),那么第三个值z在这里做什么呢?

什么是美白?

任何解释都表示赞赏.谢谢.

1 个回答
  • 第一:

    # make some z vlues
    z = numpy.sin(xy[:,1]-0.2*xy[:,1])
    

    关于这一点最奇怪的是它相当于:

    z = numpy.sin(0.8*xy[:, 1])
    

    所以我不知道为什么这样写.也许有拼写错误?

    下一个,

    # whiten them
    z = whiten(z)
    

    美白只是简化了人口的方差.请看这里的演示:

    >>> z = np.sin(.8*xy[:, 1])      # the original z
    >>> zw = vq.whiten(z)            # save it under a different name
    >>> zn = z / z.std()             # make another 'normalized' array
    >>> map(np.std, [z, zw, zn])     # standard deviations of the three arrays
    [0.42645, 1.0, 1.0]
    >>> np.allclose(zw, zn)          # whitened is the same as normalized
    True
    

    对我来说,为什么它变白是不明显的.无论如何,继续前进:

    # let scipy do its magic (k==3 groups)
    res, idx = kmeans2(numpy.array(zip(xy[:,0],xy[:,1],z)),3)
    

    让我们把它分成两部分:

    data = np.array(zip(xy[:, 0], xy[:, 1], z))
    

    这是一种奇怪的(而且很慢的)写作方式

    data = np.column_stack([xy, z])
    

    无论如何,你从两个数组开始并将它们合并为一个:

    >>> xy.shape
    (30, 2)
    >>> z.shape
    (30,)
    >>> data.shape
    (30, 3)
    

    然后它data被传递给kmeans算法:

    res, idx = vq.kmeans2(data, 3)
    

    所以现在你可以看到它在3d空间中传递给算法的30个点,而令人困惑的部分是如何创建点集.

    2023-02-14 00:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有