sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man aggregerar matchande par till anslutna komponenter i Python

Med nätverk 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)

ger:

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

Du måste kontrollera den snabbaste algoritmen nu ...

OP:

Det här fungerar utmärkt! Jag har detta i min PostgreSQL-databas nu. Ordna bara par i en tabell med två kolumner och använd sedan array_agg() för att skicka till PL/Python-funktionen get_connected() . Tack.

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;

(Obs:Jag redigerade svaret, eftersom jag trodde att det här steget kunde vara till hjälp, men för långt för en kommentar.)



  1. ROUND(nummer) Funktion i Oracle

  2. Django + Postgres + Large Time Series

  3. ostödd Scan, lagring av drivrutin.Värde skriv []uint8 i typ *time.Time

  4. skapa mysql-tabell om den inte finns