私は、ピクセルをデータとして使用し、重心の数として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