मेरा प्रश्न यह एक जैसा है। कल्पना कीजिए कि मैं sklearn.metrics.pairwise से pairwise_distances फ़ंक्शन का उपयोग करना चाहता हूं।

def network_analysis(G):
    pairwise_distances(G.nodes, G.nodes, metric=my_metric)
    # blah blah
    #

और मेरे पास है

 def my_metric(x,y,G):
     return networkx.shortest_path(G,x,y)* (G.nodes[x]['weight']-G.nodes[y]['weight'])

हालांकि मैं नहीं जानता कि pairwise_distances कॉल में मेरे मीट्रिक में G कैसे पास किया जाए।

एक साइड नोट के रूप में यह एक समस्या है जो मुझे नेटवर्कएक्स के साथ हो रही है क्योंकि नोड्स को संख्याओं द्वारा पहचाना जाता है, प्रत्येक फ़ंक्शन के लिए जिसे नोड विशेषताओं के साथ काम करने की आवश्यकता होती है, मुझे पूरे नेटवर्क को पास करना होगा।

0
Reza 19 सितंबर 2020, 10:03

1 उत्तर

सबसे बढ़िया उत्तर

मान लें कि आप pairwise_distances को नहीं बदल सकते, functools का उपयोग करके देखें। आंशिक. यह आपको निम्न कार्य करने की अनुमति देता है:

import functools

def network_analysis(G_input):
    new_metric = functools.partial(my_metric, G = G_input)
    pairwise_distances(G_input.nodes, G_input.nodes, metric = new_metric)
    

न्यू-मेट्रिक इस तरह व्यवहार करता है:

def new_metric(x, y):
    return my_metric(x, y, G)  # G has already been passed in via functools.partial
1
jrmylow 19 सितंबर 2020, 11:06