yolo_anchor

# import numpy as np
# import os
# import matplotlib.pyplot as plt
# arr = os.listdir('labels')
# list1 = []
# for i in arr:
#     anchor = np.loadtxt(os.path.join('labels',i))
#     # print(len(anchor.shape))
#     if len(anchor.shape) == 1:
#         list1.append(anchor[-2:])
#         # print(anchor[-2:])
#     else:
#         for j in anchor:
#             # print(j[-2:])
#             list1.append(j[-2:])
# np.savetxt('means.txt',list1)
# arr = np.loadtxt('means.txt')
# print(arr)
# plt.scatter(arr[:,0],arr[:,1])
# plt.show()


import numpy as np
import matplotlib.pyplot as plt
import random
import math


data = np.loadtxt('means.txt')
maxx,maxy = np.max(data[:,0]),np.max(data[:,1])
minx,miny = np.min(data[:,0]),np.min(data[:,1])#找出两个特征的最大和最小区间  方便聚类中心的随机
k = 6
Karr = [[random.uniform(minx,maxx),random.uniform(miny,maxy)] for i in range(k)]#随机k个聚类中心
print(Karr)
data = data.tolist()#将矩阵转换为list
# Karr = data[0:4]
flag_k = []
while True:
    class_K = [[] for i in range(k)]#建立一个list用来存每一个归属于聚类中心的样本点

    for i in data:#第一层循环
        # print(i)
        min = 9999
        for j in range(k):
            num2 = math.sqrt((i[0]-Karr[j][0])**2 + (i[1]-Karr[j][1])**2)#计算欧氏距离t
            if num2 < min:
                min = num2#找出距离近的值
                K_index = j#保存距离近的距离中心索引
        class_K[K_index].append(i)#存入归属于这个聚类中心的样本点

    if np.all(class_K == flag_k):
        print('迭代结束')
        break#判断聚类是否需要继续迭代
    flag_k = class_K#保存本次的归类的样本点  方便下次比较判断
    # print(flag_k)
    for n in range(k):
        arr_K = np.array(class_K[n])
        Karr[n] = np.mean(arr_K,0).tolist()#求出归类后的样本点的均值 组成新的聚类中心
    print(Karr)

for i in range(k):
    plt.scatter(np.array(class_K[i])[:,0],np.array(class_K[i])[:,1])#画出样本点
plt.scatter(np.array(Karr)[:, 0], np.array(Karr)[:, 1],marker='x')#画出聚类中心
plt.show()

print([[int(j*416) for j in i] for i in Karr])#乘416




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值