首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找numpy数组的边缘点,用于k表征质心初始化

查找numpy数组的边缘点,用于k表征质心初始化
EN

Stack Overflow用户
提问于 2017-11-25 14:59:57
回答 1查看 433关注 0票数 0

我正致力于在python中实现一个kmeans算法。我正在测试初始化我的质心的新方法,并希望实现它,看看它会对集群产生什么影响。

我的想法是从我的数据集中选择数据点,其方式是将质心初始化为数据的边缘点。

简单示例2属性示例:

让我们说这是我的输入数组

代码语言:javascript
复制
input = array([[3,3], [1,1], [-1,-1], [3,-3], [-1,1], [-3,3], [1,-1], [-3,-3]])

我想从这个数组中选择边缘点,它是3-3 -3,3。所以如果我的k是4,这些点将被选中。

在我正在处理的数据中,我的数据集中有4个和9个属性,以及大约300个数据点。

注意:我还没有找到k个<>边点的解,但是如果k是>边点,我想我会选择这4个点,然后试着把其余的点放在图的中心点上。

我还考虑过为每一列寻找max和min,然后尝试找到我的数据集的边缘,但我不知道从这些值中识别边缘的有效方法。

如果你相信这个想法行不通,我很想听听你要说什么。

问题

  1. numpy是否有这样一个函数来获取数据集边缘的数据点的索引?
  2. 如果不是,我如何在我的数据集中找到这些边缘点?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-25 18:26:09

使用scipy和成对距离来找出每个距离离另一个有多远:

代码语言:javascript
复制
from scipy.spatial.distance import pdist, squareform
p=pdist(input)

然后,使用sqaureform将p向量转换为矩阵形状:

代码语言:javascript
复制
s=squareform(pdist(input))

然后,使用numpy argwhere查找值为最大值或极值的索引,然后在输入数组中查找这些索引:

代码语言:javascript
复制
input[np.argwhere(s==np.max(p))]

array([[[ 3,  3],
        [-3, -3]],

       [[ 3, -3],
        [-3,  3]],

       [[-3,  3],
        [ 3, -3]],

       [[-3, -3],
        [ 3,  3]]])

完整的代码是:

代码语言:javascript
复制
from scipy.spatial.distance import pdist, squareform
p=pdist(input)
s=squareform(p)
input[np.argwhere(s==np.max(p))]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47487331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档