2つ質問があります。
1つ目は、1次元リストと2次元リストの掛け算ができないです。
行ったこと
python
1import collections 2from collections import Counter 3from pkgutil import iter_importers 4from pprint import pprint 5 6data = [ 7["A", "B", "C", "D", "E", "E"], 8["C", "D", "E", "A", "B", "B"], 9["D", "C", "E", "A", "A", "D"], 10["D", "A", "C", "B", "D", "E"], 11] 12 13items_each_column = [] 14for c in zip(*data): 15 items_each_column.append(len(set(c))) 16print(items_each_column) 17 18 19frequency = [] 20 21for z in zip(*data): 22 frequency.append(z) 23 z_list = list(z) 24 nx = list(map(Counter,map(list, zip(*data)))) 25 26num = len(nx) 27 28 29num_2 = [] 30 31for i in range(num): 32 nj = [] 33 for j in ["A", "B", "C", "D", "E"]: 34 ni = nx[i][j] 35 if ni == 0: 36 continue 37 nj.append(ni) 38 num_2.append(nj) 39print(num_2) 40 41for x in range(len(items_each_column)): 42 for y in range(len(num_2)): 43 w = [1/k * n for (kx, nxi) in zip(items_each_column[x], num_2[x][y])] 44 print(w) 45 46#出力結果 47#[3, 4, 2, 3, 4, 3] ←print(items_each_column)の出力結果 48#[[1, 1, 2], [1, 1, 1, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1], [1, 1, 2]] ←print(num_2)の出力結果 49Traceback (most recent call last): 50 File "c:/Users/RRR/MyPython/.py", line 46, in <module> 51 w = [1/k * n for (kx, nxi) in zip(items_each_column[x], num_2[x][y])] 52TypeError: 'int' object is not iterable
得たい結果
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]]
2つ目:[5/3, 3/2, 4/3, 3/2]
計算ルール
まず、items_each_columnではdataの○列の記号の種類数を列ごとにリストに格納しています。
それが、
python
1items_each_column = [] 2for c in zip(*data): 3 items_each_column.append(len(set(c))) 4print(items_each_column)
で示しています。
items_each_column = [3, 4, 2, 3, 4, 3]
次に、num_2は列に存在している記号の数を列ごとにリストに入れています。
それが、
python
1frequency = [] 2 3for z in zip(*data): 4 frequency.append(z) 5 z_list = list(z) 6 nx = list(map(Counter,map(list, zip(*data)))) 7 8num = len(nx) 9 10 11num_2 = [] 12 13for i in range(num): 14 nj = [] 15 for j in ["A", "B", "C", "D", "E"]: 16 ni = nx[i][j] 17 if ni == 0: 18 continue 19 nj.append(ni) 20 num_2.append(nj) 21print(num_2)
で示しています。
num_2 = [[1, 1, 2], [1, 1, 1, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1], [1, 1, 2]]
kは変数です。
nは変数です。
wは空のリストです。
そして、
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]に格納します。
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]に格納します。
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]に格納します。
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]に格納します。
#1/items_each_column[0]×num_2[0][2]を2回計算しているのはdataの1列目にDが2つあるからです。
#1/items_each_column[2]×num_2[2][0]を2回計算しているのはdataの3列目にCが2つあるからです。
#1/items_each_column[2]×num_2[2][1]を2回計算しているのはdataの3列目にEが2つあるからです。
#1/items_each_column[3]×num_2[3][0]を2回計算しているのはdataの4列目にAが2つあるからです。
#1/items_each_column[5]×num_2[5][2]を2回計算しているのはdataの6列目にEが2つあるからです。
w[0]~w[3]を各リストごとに計算したら、
[[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]]
となります。
質問が長くて申し訳ございません。
2つ目の質問です。
[[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]]をリストごとに足したいです。
得たい結果
[5/3, 3/2, 4/3, 3/2]
手計算した結果なので分数で書きましたが恐らく割り算した値が出力されると思います。
質問が長くなってしまい申し訳ございません。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー