У меня есть сеть, для которой я пытаюсь найти наилучшее возможное представление графика. Я не теоретик-график, а биолог, поэтому, пожалуйста, прошу прощения за мою техническую сущность.Возможно использование многострочного графика NetworkX?
В настоящее время сеть может быть представлена следующим образом: «n» уровни сетей, каждый из которых содержит разные множества ребер между узлами. Каждое ребро направлено и имеет связанную с ним вероятность, но свойство вероятности не используется до конца. Каждый слой хранится в виде отдельного графика в виде файла CSV в представлении списка смежности.
Используя представление списка смежности, у меня есть «итоговый» слой, в котором я сжимаю все «n» слои, причем каждый уровень вносит значение «+1» в весовые коэффициенты между каждым узлом. В настоящее время он хранится в виде отдельного графика в виде файла CSV в представлении списка смежности.
Если между парой узлов было «n» ребер, то в суммарном слое там был бы край «n»; может быть только «n» или меньше ребер между любой парой узлов.
У меня также есть слой «только полный», который состоит только из краев с весом «n». Аналогично, в настоящее время хранится как файл CSV, в представлении списка смежности.
И наконец, у меня есть «наиболее вероятный полный». В этом слое вероятности набираются. Для каждого из краев «полного только» слоя я умножаю все вероятности, связанные с каждым из n ребер (напомним: «полный» слой представляет собой сумму «n» ребер , каждое ребро с вероятностью).
В моем анализе этой сети иногда удобно переключаться между любыми слоями «n» и «сводными» слоями. Тем не менее, наиболее удобный формат минимально хранение (т.е. без предварительного вычисления либо) для хранения отдельных краев в виде таблицы (показано ниже):
|Node 1 | Node 2 | Layer 1 Weight | Layer 2 Weight | ... | Layer n Weight |
|-------|--------|----------------|----------------|-----|----------------|
| x | y | 0.99 | 1.00 | ... | 1.00 |
| x | z | 0.98 | 1.00 | ... | 0.97 |
| y | z | 0 (no edge) | 1.00 | ... | 1.00 |
я говорю, что этот формат удобен, потому что я могу создать такую таблицу очень легко.
Итак, вот мой вопрос: возможно ли в NetworkX хранить такой график (многослойный, направленный на каждый слой)? Если бы это было возможно, я бы предположил, что умею писать функции для вычисления, на лету, «сводного» графика, графа «полный» и «наиболее вероятного полномасштабного» графика, поскольку они являются подмножествами друг друга. Я также могу представить себе функции, которые вычисляют другие графики, такие как график, который также включает в себя дополнительные множества кратных ребер в узлы, которые не имеют полных ребер, входящих в каждый узел.
Однако, проверяя документацию NetworkX, я не могу найти ничего похожего на то, что я ищу. Лучшее, что я мог найти, это «мультиграфик», который допускает множественные ребра между узлами, но каждое ребро должно быть неориентировано. Я что-то упустил?
Кроме того, есть ли лучшее представление о том, чего я пытаюсь достичь? Опять же, мне не хватает опыта теории графов здесь, поэтому я мог бы что-то упустить. Большое спасибо (заранее) всем, кто требует времени ответить!
Что было бы проблемой при использовании N DiGraphs? – Back2Basics
Это может сработать, но мне нужно будет удерживать графики N + 3 (от 1 до N для каждого слоя, а затем итоговые, полные и наиболее вероятные уровни) и получить доступ к интересующему графу. Я также должен обновить каждый из графиков, если базовые данные изменятся, что может увеличить время вычислений. – ericmjl
Изменяется ли направление края между слоями? – Back2Basics