teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

2019/11/08 05:51

投稿

secondson
secondson

スコア21

title CHANGED
File without changes
body CHANGED
@@ -1,30 +1,16 @@
1
+ ある数値集合における数値同士の変換のやり方が分かりません。
1
- 様に読み取った画像に対して分析(k-means法)行いました。
2
+ 下のlabelsはk-meansのモジュール使って出力したものです
2
3
  ```python
3
- img=plt.imread(#画像名)
4
- original_shape = img.shape
5
- h,w,c = img.shape
6
- data=img.reshape(w*h, 3,1)
7
- data=data.reshape(len(data), -1).astype(np.float64)
8
-
9
- k=input(class:) #ここでは10としました。
10
- model = KMeans(n_clusters=k, max_iter=50, init="random", n_jobs=-1)
11
- model.fit(data)
12
- labels=model.labels_ #[6 4 5 6 2 5 ......5 7 8]といった集合です。
4
+ labels=[6 5 7 6 2 8 1.....7 5 1 2]
13
- centers = model.cluster_centers_ #[[62 61 52][126 124 110]......[22 21 17]]
14
5
  ```
15
- こでcentersにおける一つのリスト毎の数値の大小関係を用いてlabels内にて数値変換を行いたいです
6
+ のlabelsにおいて数値変換をたいですが、
16
- そこでcentersリスト内の合計を計算し(jlist=[175 360..(175<x<360)..60])、小さい順に並び替えると同時に順番も加えました(klist=[(9,60)(0,175)...(1,360)])。その順番のみを抽出したのがllistです。
17
7
  ```python
18
- jlist=np.sum(centers,axis=1)
8
+ l=[8,7,3,6,1,2,9,5,0,4]
19
- klist=sorted(enumerate(jlist), key=lambda x: x[1])
20
- llist=[]
21
- for z in klist:
22
- llist.append(z[0]) #[9,0.......1]  ※(1~k)
23
9
  ```
24
- このllistを参考
10
+ このリストおける順番に対応させたいです。
25
- llist[0]=9であるため、label内において9→0に数値変換。
26
- 同様に
27
- llist[1]=0であるため、label内において01に数値変換。
11
+ 例えば、l[0]=8であるためlabels内において8を0に変換。同様にl[1]=7であるためlabels内おいて7を1に変換。
28
- このようにllist(元はcenters)における順番によって、labels内の数値を変換したいと考えています。
29
12
 
13
+ このような数値と数値の変換を行いたいのですが、for文を使ったり、辞書を用いて単語を経由させて数値変換したりしたのですが、正確な変換が出来ませんでした。
14
+
30
- 文章ですが、よろしくお願いします
15
+ 上記のような数値変換の方法を教えて頂けたら幸いです。
16
+ (前回の質問文が拙かったため大きく編集しました。指摘して頂いた方、ありがとうございます。)