Pythonのプログラムにて、二次元配列から同値関係(単純に同じ列の値の数を足し合わせたもの)を計算したものを出力したいと考えております。
具体的には、
例えば動物データセット
||size|neck|color|
|:--|:--:|--:|
|Tiger|0|1|0
|Lion|0|0|2
|Cat|1|0|2
|Dog|0|0|0
▲表1
のようなデータセットから、
data = [[0,1,0],[0,0,2],[1,0,2],[0,0,0]] という二次元配列に格納したとします。
ここから同値関係を計算した正方行列を出力したいと考えてます。
出力したいものの具体的な計算方法
||Tiger|Lion|Cat|Dog|
|:--|:--:|--:|
|Tiger|0|1|0|2|
Lion|1|0|2|2
Cat|0|2|0|1
Dog|2|2|1|0
▲表2(weight_matrixと名付けます)
出力結果は上表になります。正方行列として捉えてください。こちらも同様に二次元配列。
具体的な計算方法としては、
表1の1行目と2行目の同列での同じ値はsizeの1つだけ。なのでweight_matrix[1][2]は1。
表1の1行目と3行目の同じ値は0個なのでwight_matrix[1][3]は0。
表1の1行目と4行目の同じ値はsizeとcolorの2つなのでweight_matrix[1][4]は2。
この計算作業を全ての行に対して行った結果が表2になります。
どなたかこの計算プログラムをご教授いただけないでしょうか。
やること自体は単純なのですが、forループでのdataのindex取得が上手くできません。
ご指摘をいただいたので、途中までのコードを載せます。
Python
1w_matrix = [] 2for i in range(len(data)): 3 cnt = 0 4 for j in range(len(data[i])): 5 temp_list = [] 6 if data[i][j] == data[i+j][j]: 7 cnt += 1 8 temp_list.append(cnt) 9 10 w_matrix.append(temp_list)
特に if data[i][j] == data[i+j][j]:
のインデックス参照部分がわかっておりません。
temp_list.append(cnt)の位置もおかしいです。
回答3件
あなたの回答
tips
プレビュー