sql >> データベース >  >> RDS >> PostgreSQL

Pythonで一致するペアを接続されたコンポーネントに集約する方法

    networkXの場合:

    import networkx as nx
    G1=nx.Graph()
    G1.add_edges_from([("a","b"),("b","c"),("c","d"),("d","e"),("f","g")])
    sorted(nx.connected_components(G1), key = len, reverse=True)
    

    与える:

    [['a', 'd', 'e', 'b', 'c'], ['f', 'g']]
    

    今すぐ最速のアルゴリズムをチェックする必要があります...

    OP:

    これはうまくいきます!これはPostgreSQLデータベースにあります。ペアを2列のテーブルに整理してから、array_agg()を使用するだけです。 PL /Python関数に渡すget_connected() 。ありがとう。

    CREATE OR REPLACE FUNCTION get_connected(
        lhs text[],
        rhs text[])
      RETURNS SETOF text[] AS
    $BODY$
        pairs = zip(lhs, rhs)
    
        import networkx as nx
        G=nx.Graph()
        G.add_edges_from(pairs)
        return sorted(nx.connected_components(G), key = len, reverse=True)
    
    $BODY$ LANGUAGE plpythonu;
    

    (注:この手順を示すことは役立つ補遺かもしれないと思ったので、回答を編集しましたが、コメントするには長すぎます。)



    1. MySQL 5.1でインデックスのサイズを決定するにはどうすればよいですか?

    2. MySQLとMatlab

    3. Laravel:ネストされたhasManyリレーションシップ(hasManyThrough)の平均を取得する方法

    4. 使用されるSELECTステートメントの列数が異なります