質問編集履歴

1

2019/11/08 05:51

投稿

secondson
secondson

スコア21

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