sql >> Databáze >  >> RDS >> PostgreSQL

Jak agregovat odpovídající páry do připojených komponent v Pythonu

Se sítí X:

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)

dávání:

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

Nyní musíte zkontrolovat nejrychlejší algoritmus ...

OP:

Tohle funguje skvěle! Nyní to mám ve své databázi PostgreSQL. Stačí uspořádat páry do dvousloupcové tabulky a poté použít array_agg() předat funkci PL/Python get_connected() . Děkuji.

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;

(Poznámka:Upravil jsem odpověď, protože jsem si myslel, že zobrazení tohoto kroku může být užitečným doplňkem, ale je příliš dlouhé na komentář.)



  1. Jak vytvořit databázi v MySQL

  2. Získávání trasování zásobníku chyb MySQL na Oracle JDBC Connection

  3. Tabulka MySQL se z nějakého důvodu zvyšuje o 10

  4. Hibernate odesílání nadbytečných dotazů do databáze