PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak agregować pasujące pary w połączone komponenty w Pythonie?

Z siecią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)

dając:

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

Musisz teraz sprawdzić najszybszy algorytm ...

OP:

To działa świetnie! Mam to teraz w mojej bazie danych PostgreSQL. Po prostu zorganizuj pary w dwukolumnową tabelę, a następnie użyj array_agg() przekazać do funkcji PL/Pythona get_connected() . Dzięki.

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;

(Uwaga:edytowałem odpowiedź, ponieważ pomyślałem, że pokazanie tego kroku może być pomocnym dodatkiem, ale zbyt długi na komentarz.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Transakcje zagnieżdżone w postgresql 8.2?

  2. Czy mogę użyć polecenia \copy do funkcji postgresql?

  3. PostgreSQL, Npgsql zwraca 42601:błąd składni przy lub w pobliżu $1

  4. Migracje do Railsów 3:boolean (mysql vs postgreSQL)

  5. Wdrażanie projektu Django na Webfaction