質問編集履歴

2

w,k,nが何を示しているのか誤解を招くような形で書いていたので修正しました。

2022/06/15 02:42

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -60,27 +60,66 @@
60
60
  1つ目:[[1/3, 1/4, 1/4, 1/3, 1/4, 1/4],[1/3, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/3, 1/4, 1/4]]
61
61
  2つ目:[5/3, 3/2, 4/3, 3/2]
62
62
 
63
+ **計算ルール**
64
+ まず、items_each_columnではdataの○列の記号の種類数を列ごとにリストに格納しています。
65
+ それが、
66
+ ```python
67
+ items_each_column = []
68
+ for c in zip(*data):
69
+ items_each_column.append(len(set(c)))
63
- 1/k*nをすると以下のような結果が計算できます。
70
+ print(items_each_column)
71
+ ```
72
+ で示しています。
64
- [[1/3, 1/4, 1/4, 1/3, 1/4, 1/4],[1/3, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/3, 1/4, 1/4]] ←恐らく割り算した値が出力されると思います。
73
+ items_each_column = [3, 4, 2, 3, 4, 3]
65
74
 
66
- まず一次元リストの[0]と二次元リストの[0][0]から[0][2]を計算してwいうリストの[0]から[3]に入れす。
75
+ 次にnum_2は列に存在している記号の数を列ごリストに入れす。
76
+ それが、
77
+ ```python
67
- **dataの一列目の"ACDD"においてはDが2つあるのでprint(num_2)の出力結果が[1, 1, 2]のようになってるのでこのように重複しているところは2回計算できるようにしたいです**。
78
+ frequency = []
68
79
 
80
+ for z in zip(*data):
81
+ frequency.append(z)
82
+ z_list = list(z)
69
- 次に、一次元リストの[1]と二次元リスト[1][0]から[1][2]を計算してwというのリストの[0]から[3]に入れたいです。
83
+ nx = list(map(Counter,map(list, zip(*data))))
70
- つまり、[[1/3, 1/4, 1/4, 1/3, 1/4, 1/4],[1/3, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/3, 1/4, 1/4]]の[0]は1行目の計算結果です。[3]は4行目の計算結果です。
71
84
 
72
- **計算ルール**
73
- k = [3, 4, 2, 3, 4, 3]
74
- n = [[1, 1, 2], [1, 1, 1, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1], [1, 1, 2]]
75
- w = 1/ k*n
85
+ num = len(nx)
76
- のとき、
77
- 1/[0]×[0][0]、1/[0]×[0][1]、1/[0]×[0][2]、1/[0]×[0][2]
78
- #1/[0]×[0][2]を2回計算しているのはdataの1列目にDが2つあるからです。
79
- 1/[1]×[1][0]、1/[1]×[1][1]、1/[1]×[1][2]、1/[1]×[1][3]
80
- 1/[2]×[2][0]、1/[2]×[2][0]、1/[2]×[2][1]、1/[2]×[2][1]
81
- #1/[1]×[2][0]を2回計算しているのはdataの3列目にCが2つあるからです。
82
- #1/[1]×[2][1]を2回計算しているのはdataの3列目にEが2つあるからです。
83
86
 
87
+
88
+ num_2 = []
89
+
90
+ for i in range(num):
91
+ nj = []
92
+ for j in ["A", "B", "C", "D", "E"]:
93
+ ni = nx[i][j]
94
+ if ni == 0:
95
+ continue
96
+ nj.append(ni)
97
+ num_2.append(nj)
98
+ print(num_2)
99
+ ```
100
+ で示しています。
101
+ num_2 = [[1, 1, 2], [1, 1, 1, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1], [1, 1, 2]]
102
+
103
+ kは変数です。
104
+ nは変数です。
105
+ wは空のリストです。
106
+
107
+ そして、
108
+ 1/items_each_column[0]*num_2[0][0], 1/items_each_column[1]*num_2[1][0], 1/items_each_column[2]*num_2[2][0], 1/items_each_column[3]*num_2[3][0], 1/items_each_column[4]*num_2[4][0], 1/items_each_column[5]*num_2[5][0]を計算したらw[0]に格納します。
109
+ 1/items_each_column[0]*num_2[0][1], 1/items_each_column[1]*num_2[1][1], 1/items_each_column[2]*num_2[2][0], 1/items_each_column[3]*num_2[3][0], 1/items_each_column[4]*num_2[4][1], 1/items_each_column[5]*num_2[5][1]を計算したらw[1]に格納します。
110
+ 1/items_each_column[0]*num_2[0][2], 1/items_each_column[1]*num_2[1][2], 1/items_each_column[2]*num_2[2][1], 1/items_each_column[3]*num_2[3][1], 1/items_each_column[4]*num_2[4][2], 1/items_each_column[5]*num_2[5][2]を計算したらw[2]に格納します。
111
+ 1/items_each_column[0]*num_2[0][2], 1/items_each_column[1]*num_2[1][3], 1/items_each_column[2]*num_2[2][1], 1/items_each_column[3]*num_2[3][2], 1/items_each_column[4]*num_2[4][3], 1/items_each_column[5]*num_2[5][2]を計算したらw[3]に格納します。
112
+
113
+
114
+ #1/items_each_column[0]×num_2[0][2]を2回計算しているのはdataの1列目にDが2つあるからです。
115
+ #1/items_each_column[2]×num_2[2][0]を2回計算しているのはdataの3列目にCが2つあるからです。
116
+ #1/items_each_column[2]×num_2[2][1]を2回計算しているのはdataの3列目にEが2つあるからです。
117
+ #1/items_each_column[3]×num_2[3][0]を2回計算しているのはdataの4列目にAが2つあるからです。
118
+ #1/items_each_column[5]×num_2[5][2]を2回計算しているのはdataの6列目にEが2つあるからです。
119
+
120
+ w[0]~w[3]を各リストごとに計算したら、
121
+ [[1/3, 1/4, 1/4, 1/3, 1/4, 1/4],[1/3, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/3, 1/4, 1/4]]
122
+ となります。
84
123
 
85
124
  質問が長くて申し訳ございません。
86
125
 

1

計算ルールを追加しました。

2022/06/15 01:12

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -50,13 +50,16 @@
50
50
 
51
51
  #出力結果
52
52
  #[3, 4, 2, 3, 4, 3] ←print(items_each_column)の出力結果
53
- [[1, 1, 2], [1, 1, 1, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1], [1, 1, 2]] ←print(num_2)の出力結果
53
+ #[[1, 1, 2], [1, 1, 1, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1], [1, 1, 2]] ←print(num_2)の出力結果
54
54
  Traceback (most recent call last):
55
55
  File "c:/Users/RRR/MyPython/.py", line 46, in <module>
56
56
  w = [1/k * n for (kx, nxi) in zip(items_each_column[x], num_2[x][y])]
57
57
  TypeError: 'int' object is not iterable
58
58
  ```
59
59
  **得たい結果**
60
+ 1つ目:[[1/3, 1/4, 1/4, 1/3, 1/4, 1/4],[1/3, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/3, 1/4, 1/4]]
61
+ 2つ目:[5/3, 3/2, 4/3, 3/2]
62
+
60
63
  1/k*nをすると以下のような結果が計算できます。
61
64
  [[1/3, 1/4, 1/4, 1/3, 1/4, 1/4],[1/3, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/3, 1/4, 1/4]] ←恐らく割り算した値が出力されると思います。
62
65
 
@@ -65,6 +68,19 @@
65
68
 
66
69
  次に、一次元リストの[1]と二次元リスト[1][0]から[1][2]を計算してwというのリストの[0]から[3]に入れたいです。
67
70
  つまり、[[1/3, 1/4, 1/4, 1/3, 1/4, 1/4],[1/3, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/6, 1/4, 1/4],[1/6, 1/4, 1/4, 1/3, 1/4, 1/4]]の[0]は1行目の計算結果です。[3]は4行目の計算結果です。
71
+
72
+ **計算ルール**
73
+ k = [3, 4, 2, 3, 4, 3]
74
+ n = [[1, 1, 2], [1, 1, 1, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1], [1, 1, 2]]
75
+ w = 1/ k*n
76
+ のとき、
77
+ 1/[0]×[0][0]、1/[0]×[0][1]、1/[0]×[0][2]、1/[0]×[0][2]
78
+ #1/[0]×[0][2]を2回計算しているのはdataの1列目にDが2つあるからです。
79
+ 1/[1]×[1][0]、1/[1]×[1][1]、1/[1]×[1][2]、1/[1]×[1][3]
80
+ 1/[2]×[2][0]、1/[2]×[2][0]、1/[2]×[2][1]、1/[2]×[2][1]
81
+ #1/[1]×[2][0]を2回計算しているのはdataの3列目にCが2つあるからです。
82
+ #1/[1]×[2][1]を2回計算しているのはdataの3列目にEが2つあるからです。
83
+
68
84
 
69
85
  質問が長くて申し訳ございません。
70
86