49586


pythonのループの仕方を教えて下さい。  
よろしくお願いします。

(参考)無向グラフと有向グラフ＞無向グラフの隣接行列(adjacency matrix)  
<http://www.dais.is.tohoku.ac.jp/~shioura/teaching/ad11/ad11-09.pdf#page=5>

[code]

    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
    
[/code]

(参考)[線分群から、閉図形の数を数える方法を教えて下さい。](https://ja.stackoverflow.com/questions/49392/%e7%b7%9a%e5%88%86%e7%be%a4%e3%81%8b%e3%82%89-%e9%96%89%e5%9b%b3%e5%bd%a2%e3%81%ae%e6%95%b0%e3%82%92%e6%95%b0%e3%81%88%e3%82%8b%e6%96%b9%e6%b3%95%e3%82%92%e6%95%99%e3%81%88%e3%81%a6%e4%b8%8b%e3%81%95%e3%81%84)

2018-10-24--------------------------------------------------------------------------  
magichan様 ありがとうございます。ループについて、少しわかりました。  
この配列lstに,「1」を入力する方法を教えて下さい。(例.線分aより,1行2列目,2行1列目=1)  
よろしくお願いします。

[code]

    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
    
[/code]

2018-10-25--------------------------------------------------------------------------  
できました。ループを短くする方法があれば、教えて下さい。よろしくお願いします。

[code]

    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
    
[/code]


CC BY-SA 4.0
2018-10-23T14:10:31.827
49580
2018-10-25T13:20:35.893
2018-10-25T13:20:35.893
17199
17199
question
python pandas グラフ理論
pandasデータへ変換する方法を教えて下さい。


とりあえず書いてみました。

やりたいことはこういうことでしょうかね？

[code]

    import pandas as pd
    
    lst = []
    for name in list('abcdef'):
        lst.append(list(map(int, input("線分{} :".format(name)).split(","))))
    df = pd.DataFrame(lst)
    tbl = pd.concat([df,df.rename(columns={0:1,1:0})])
    result = tbl.pivot(index=0,columns=1,values=True).notna().astype(int)
    print(result)
    
    # (実行結果)
    #線分a :0,1
    #線分b :0,2
    #線分c :0,3
    #線分d :1,2
    #線分e :2,3
    #線分f :3,4
    #1  0  1  2  3  4
    #0
    #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
    
[/code]


CC BY-SA 4.0
2018-10-23T16:35:25.103
49586
2018-10-23T16:35:25.103
24801
49580
answer