A python module to compute GED using cython
Project description
Graph Matching Framework
This is a Cython framework to perform graph matching. It uses the flexibility of python and the efficiency of compiled c code to package contains the core files to perform graph matching.
Installation
Prerequisites
- Python 3.9
- Numpy
- A C++ compatible compiler
Install
# Clone repo
git clone https://github.com/CheshireCat12/graph-matching-core.git [folder-name]
# Move to repo directory
cd [folder-name]
#Create python virtual environment with python
python -m venv venv
source venv/bin/activate
# Install Numpy
pip install numpy
# Compile and install the code
pip install -e .
Run tests
python -m pytest tests
How to use
# More example available in ./tests/
from cyged.graph_pkg_core import GED
from cyged.graph_pkg_core.edit_cost.edit_cost_vector import EditCostVector
from cyged.graph_pkg_core.graph.edge import Edge
from cyged.graph_pkg_core import Graph
from cyged.graph_pkg_core.graph.label.label_edge import LabelEdge
from cyged.graph_pkg_core.graph.label.label_node_vector import LabelNodeVector
from cyged.graph_pkg_core.graph.node import Node
from cyged.graph_pkg_core import LoaderVector
ged = GED(EditCostVector(1., 1., 1., 1., 'euclidean'))
n, m = 4, 3
graph_source = Graph('gr_source', 'gr_source.gxl', n)
graph_target = Graph('gr_target', 'gr_targe.gxl', m)
# Init graph source: add nodes and edges
graph_source.add_node(Node(0, LabelNodeVector(np.array([1.]))))
graph_source.add_node(Node(1, LabelNodeVector(np.array([2.]))))
graph_source.add_node(Node(2, LabelNodeVector(np.array([1.]))))
graph_source.add_node(Node(3, LabelNodeVector(np.array([3.]))))
graph_source.add_edge(Edge(0, 1, LabelEdge(0)))
graph_source.add_edge(Edge(1, 2, LabelEdge(0)))
graph_source.add_edge(Edge(1, 3, LabelEdge(0)))
graph_source.add_edge(Edge(2, 3, LabelEdge(0)))
# Init graph target: add nodes and edges
graph_target.add_node(Node(0, LabelNodeVector(np.array([3.]))))
graph_target.add_node(Node(1, LabelNodeVector(np.array([2.]))))
graph_target.add_node(Node(2, LabelNodeVector(np.array([2.]))))
graph_target.add_edge(Edge(0, 1, LabelEdge(0)))
graph_target.add_edge(Edge(1, 2, LabelEdge(0)))
edit_cost = ged.compute_edit_distance(graph_source, graph_target)
Parallelization
[...]
from cyged.graph_pkg_core.algorithm.matrix_distances import MatrixDistances
ged = GED(EditCostVector(1., 1., 1., 1., 'euclidean'))
# List of graphs
source_graphs = [grs1, grs2, ..., grsm]
target_graphs = [grt1, grt2, ..., grtn]
mat_dist = MatrixDistances(ged, parallel=True)
mat_edit_dist = mat_dist.calc_matrix_distances(source_graphs,
target_graphs,
heuristic=True,
num_cores=8)
Cite
Please cite our paper if you use this code in your work:
@inproceedings{GilliozR22,
author = {Anthony Gillioz and
Kaspar Riesen},
editor = {Maria De Marsico and
Gabriella Sanniti di Baja and
Ana L. N. Fred},
title = {Improving Graph Classification by Means of Linear Combinations of
Reduced Graphs},
booktitle = {Proceedings of the 11th International Conference on Pattern Recognition
Applications and Methods, {ICPRAM} 2022, Online Streaming, February
3-5, 2022},
pages = {17--23},
publisher = {{SCITEPRESS}},
year = {2022},
url = {https://doi.org/10.5220/0010776900003122},
doi = {10.5220/0010776900003122}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cyged-0.2.3.tar.gz
(17.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cyged-0.2.3.tar.gz.
File metadata
- Download URL: cyged-0.2.3.tar.gz
- Upload date:
- Size: 17.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0261ca6fcaf6a4e3acadb0299edee04340d2b5a0cba8c8d756bacbcb928a6a8
|
|
| MD5 |
7ca50d8af9c02e89f228eeccdb741369
|
|
| BLAKE2b-256 |
21d3a663a3e282a0babe8141be31b6ff060688652124a100a09b897112917534
|
File details
Details for the file cyged-0.2.3-cp39-cp39-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: cyged-0.2.3-cp39-cp39-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c343f6f8e1dc5f80f43b0aeac53e0818ea0133bd8b7f0665c09bf642740031e
|
|
| MD5 |
f66eb78814684be25e1ed1bd4c44409a
|
|
| BLAKE2b-256 |
337d6bc4c800f8f41244917340ce0b6e34c17de7c08ee0bed930a13f9d819d3f
|