Я реализовал этот фрагмент кода, найденный в Yuxing Yan Python для Finance 2nd edition, и столкнулся с некоторыми проблемами с производительностью при создании биномиальных сеток с максимум 5000 узлами (ie около 100 периодов в дереве) с метками .
import networkx as nx
def binomial_grid(n):
G = nx.Graph()
for i in range(0, n + 1):
for j in range(1, i + 2):
if i < n:
G.add_edge((i, j), (i + 1, j))
G.add_edge((i, j), (i + 1, j + 1))
posG = {}
for node in G.nodes():
posG[node] = (node[0], n + 2 + node[0] - 2 * node[1])
nx.draw(G, pos=posG)
plt.show()
В настоящее время я использую встроенную функцию networkX:
nx.draw_networkx_labels(G, posG, labels=labels)
, чтобы добавить метки к узлам. Метки являются словарями, где ключи - это кортеж (ie узлы) и строки значений. Например:
{(0, 1): '-6.45,-6.45', (1, 1): '-6.46,-7.48', (1, 2): '-6.46,-5.54', ..., }
Я прочитал, что networkX полностью закодирован в python и поэтому сталкивается с некоторыми проблемами с производительностью, но, учитывая мое использование (максимально, я построю 5000 узлов), я сомневаюсь, что это нормально. На моем компьютере требуется около 25 секунд, чтобы построить график с метками, и даже при увеличении масштаба он становится запаздывающим на графике matplotlib.
Думаю, это может быть связано с тем, что реализация книги не очень оптимизирована? Но я не уверен.
Можно ли улучшить его?
ограничение: отображать метки на узлах, и то, что я уже пробовал: изменение типа значений с строкового на плавающее, ничего удивительного не изменило.
Спасибо