我一直在尝试使用像素作为数据来实现图像压缩的k均值,k作为质心数量。我不断收到一个错误:IndexError: invalid index to scalar variable.
;在if assignment[i] == j:
的比较声明中。我决定首先计算初始质心,然后用它将数据点聚类到正确的质心。然后使用赋值变量重新计算质心到argmin中。图像压缩中的K均值numpy错误
我的代码:
def mykmeans(pixels, K):
k=int(K)
#number of pixels dimension
pixel_num=pixels.shape[0]
print('Pixel num',pixel_num)
pixel_rand1=np.random.randint(pixel_num,size=(1,k))
int_cent=pixels[pixel_rand1[0],:] #new centroids
#for initial centroids
dis_temp1=np.array((pixel_num,k))
assignment= [None]*pixel_num
for i in range(pixel_num):
for j in range(k):
dis_temp1[j]=linalg.norm(pixels[i]-int_cent[j])**2
assignment=np.argmin(dis_temp1)
print('Assignemnt',int(assignment))
x_new=int_cent
new_assign=np.array([])
for i in range(pixel_num):
for j in range(k):
if assignment[i] is j:
new_assign += assignment[i]
#for after initial centroid
while (linalg.norm(x_new-x_old) <1e-4):
#part 1
for i in range(pixel_num):
for j in range(k):
dis_temp[j]=linalg.norm(pixels[i]-x_old[j])**2
assignment[i]=np.argmin(dis_temp)
#
# #part 2
new_assign=[]
for i in range(pixel_num):
for j in range(k):
if assignment[i] == j:
new_assign += assignment[i]
x_new[j]=np.mean(new_assign,axis=0)
centroid=x_new
print(assignment)
print(centroid)
return assignment, centroid