我一直在嘗試使用像素作爲數據來實現圖像壓縮的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