pandasデータへ変換する方法を教えて下さい。
pythonのループの仕方を教えて下さい。
よろしくお願いします。
(参考)無向グラフと有向グラフ>無向グラフの隣接行列(adjacency matrix)
http://www.dais.is.tohoku.ac.jp/~shioura/teaching/ad11/ad11-09.pdf#page=5
import pandas as pd
# input : 線分a [0,1]
# 線分b [0,2]
# 線分c [0,3]
# 線分d [1,2]
# 線分e [2,3]
# 線分f [3,4]
# スクリプト???
# output
df = pd.DataFrame(
[[0,1,1,1,0],
[1,0,1,0,0],
[1,1,0,1,0],
[1,0,1,0,1],
[0,0,0,1,0]],
index =["0","1","2","3","4"],
columns=["0","1","2","3","4"])
print(df)
# 0 1 2 3 4
# 0 0 1 1 1 0
# 1 1 0 1 0 0
# 2 1 1 0 1 0
# 3 1 0 1 0 1
# 4 0 0 0 1 0
2018-10-24--------------------------------------------------------------------------
magichan様 ありがとうございます。ループについて、少しわかりました。
この配列lstに,「1」を入力する方法を教えて下さい。(例.線分aより,1行2列目,2行1列目=1)
よろしくお願いします。
import pandas as pd
import numpy as np
array2 = np.array([[0,1],[0,2],[0,3],[1,2],[2,3],[3,4]])
array1 = set(np.sort(array2.ravel()))
lst = np.zeros((len(array1),len(array1)),dtype =int)
df = pd.DataFrame(lst,index =array1,columns=array1)
print(df)
# 0 1 2 3 4
# 0 0 0 0 0 0
# 1 0 0 0 0 0
# 2 0 0 0 0 0
# 3 0 0 0 0 0
# 4 0 0 0 0 0
2018-10-25--------------------------------------------------------------------------
できました。ループを短くする方法があれば、教えて下さい。よろしくお願いします。
import pandas as pd
import numpy as np
def getNearestValue(list, num):
"""
Pythonのリスト要素からある値と最も近い値を取り出す
https://qiita.com/icchi_h/items/fc0df3abb02b51f81657
"""
idx = np.abs(np.asarray(list) - num).argmin()
return list[idx]
array2 = np.array([[0,1],[0,2],[0,3],[1,2],[2,3],[3,4]])
array1 = list(set(np.sort(array2.ravel())))
lst = np.zeros((len(array1),len(array1)),dtype =int)
i=0
for x in range(len(array2)):
ir=getNearestValue(array1,array2[i,0])
ic=getNearestValue(array1,array2[i,1])
lst[ir,ic]=1
lst[ic,ir]=1
i += 1
df = pd.DataFrame(lst,index =array1,columns=array1)
print(df)
# 0 1 2 3 4
# 0 0 1 1 1 0
# 1 1 0 1 0 0
# 2 1 1 0 1 0
# 3 1 0 1 0 1
# 4 0 0 0 1 0