Я имею в виду, чтобы создать направленный граф, ребра которого между узлами создается, если определенный критерий удовлетворяется, т.е.Ускорение создания ребер на основе парного взаимодействия узлов
if (crit(i,j)) :
G.add_edge(i,j)
Для этого я написал цикл
nnd = len(ndlist)
for ind in range(nnd) :
ndi = ndlist[ ind ]
for jnd in range(nnd) :
if (jnd != ind) : # no self interaction
ndj = ndlist[ jnd ]
interaction = inrange(ndi, ndj, threshold)
if (interaction) :
G.add_edge(ind, jnd)
ndlist
представляет собой список, который содержит особенности узлов, один элемент для каждого узла, и эта информация используется для оценки взаимодействия между парами узлов. Узлы помечены с тем же номером индекса, что и в ndlist
, и это используется. Это также является причиной циклизации целых чисел, поскольку к ним присоединяются (ind,jnd)
, а не (ndi,ndj)
.
Это оказывается очень медленным. Есть ли способ оптимизировать это?
Конечно, время выполнения будет зависеть от inrange
, но может быть способом ускорения коды независимо от inrange
(возможно подключить содержимое ndlist
в качестве атрибутов узлов и итерации по-разному). Даже преобразование моего «очень медленного» кода в «просто медленный» код поможет.
Какова связь между 'nnd' и' ndlist'? и 'jnd'?Есть ли причина, по которой вы не просто выполняете внешний цикл как «для ndi в ndlist:»? – Joel
Примечание. Если inrange является стохастической функцией, могут быть способы сделать это намного более эффективным. Это? – Joel
@Joel - см. Обновленное сообщение. 'inrange' не является стохастическим. –