Python:全局效率内存错误(networkx)

Python:全局效率内存错误(networkx),python,memory,networkx,network-efficiency,Python,Memory,Networkx,Network Efficiency,我正在处理一个100x100网格网络。我想确定its,看看它内部的信息交换效率如何 我使用一个定制的函数来计算效率,然后将其应用到我的网络中 但是,我遇到了一个内存错误,它指向调用函数的行(最后一行)这是否取决于Python使用了多少RAM?如何解决此问题? 代码如下: from __future__ import print_function, division import numpy from numpy import * import networkx as nx import matp

我正在处理一个
100x100
网格网络。我想确定its,看看它内部的信息交换效率如何

我使用一个定制的函数来计算效率,然后将其应用到我的网络中

但是,我遇到了一个
内存错误
,它指向调用函数的行(最后一行)这是否取决于Python使用了多少RAM?如何解决此问题?

代码如下:

from __future__ import print_function, division
import numpy
from numpy import *
import networkx as nx
import matplotlib.pyplot as plt
import csv
from collections import *
import os
import glob
from collections import OrderedDict 

def global_efficiency(G, weight=None):
    N = len(G)
    if N < 2:
        return 0   
    inv_lengths = []
    for node in G:
        if weight is None:
            lengths = nx.single_source_shortest_path_length(G, node)
        else:
            lengths=nx.single_source_dijkstra_path_length(G,node,weight=weight)

        inv = [1/x for x in lengths.values() if x is not 0]
        inv_lengths.extend(inv)

    return sum(inv_lengths)/(N*(N-1))

N=100
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() )
labels = dict( ((i, j), i + (N-1-j) * N ) for i, j in G.nodes() )
nx.relabel_nodes(G,labels,False)
inds=labels.keys()
vals=labels.values()
inds.sort()
vals.sort()
pos2=dict(zip(vals,inds))
nx.draw_networkx(G, pos=pos2, with_labels=False, node_size = 10)
eff=global_efficiency(G)
from\uuuuu future\uuuuu导入打印功能,分区
进口numpy
从numpy进口*
将networkx导入为nx
将matplotlib.pyplot作为plt导入
导入csv
从集合导入*
导入操作系统
导入glob
从集合导入订单
def全局_效率(G,重量=无):
N=len(G)
如果N<2:
返回0
库存长度=[]
对于G中的节点:
如果重量为零:
长度=nx。单源最短路径长度(G,节点)
其他:
长度=nx。单源路径长度(G,节点,权重=权重)
inv=[1/x表示x的长度。如果x不是0,则值为()
库存长度延伸(库存)
返回和(库存长度)/(N*(N-1))
N=100
G=nx.网格二维图(N,N)
pos=dict((n,n)表示G.nodes()中的n个节点)
labels=dict((i,j),i+(N-1-j)*N)表示G.nodes()中的i,j)
nx.relabel_节点(G,标签,False)
inds=labels.keys()
VAL=标签。值()
inds.sort()
vals.sort()
pos2=dict(zip(VAL、IND))
nx.draw\u networkx(G,pos=pos2,带\u标签=False,节点\u大小=10)
eff=整体效率(G)

我想我知道你为什么会有内存错误。为每个节点保留所有最短路径的所有长度会产生一个非常庞大的列表
inv\u length

我建议进行同等修改:

def global_efficiency(G, weight=None):
    N = len(G)
    if N < 2:
        return 0   
    inv_lengths = []
    for node in G:
        if weight is None:
            lengths = nx.single_source_shortest_path_length(G, node)
        else:
            lengths=nx.single_source_dijkstra_path_length(G,node,weight=weight)

        inv = [1/x for x in lengths.values() if x is not 0]

        # Changes here
        inv_sum = sum(inv)
        inv_lengths.append(inv_sum)  # add results, one per node

    return sum(inv_lengths)/(N*(N-1))
def全局_效率(G,重量=无):
N=len(G)
如果N<2:
返回0
库存长度=[]
对于G中的节点:
如果重量为零:
长度=nx。单源最短路径长度(G,节点)
其他:
长度=nx。单源路径长度(G,节点,权重=权重)
inv=[1/x表示x的长度。如果x不是0,则值为()
#这里的变化
库存总和=总和(库存)
inv_length.追加(inv_sum)#添加结果,每个节点一个
返回和(库存长度)/(N*(N-1))

它给出了相同的结果(我检查过)。

我想我知道你为什么会有内存错误。为每个节点保留所有最短路径的所有长度会产生一个非常庞大的列表
inv\u length

我建议进行同等修改:

def global_efficiency(G, weight=None):
    N = len(G)
    if N < 2:
        return 0   
    inv_lengths = []
    for node in G:
        if weight is None:
            lengths = nx.single_source_shortest_path_length(G, node)
        else:
            lengths=nx.single_source_dijkstra_path_length(G,node,weight=weight)

        inv = [1/x for x in lengths.values() if x is not 0]

        # Changes here
        inv_sum = sum(inv)
        inv_lengths.append(inv_sum)  # add results, one per node

    return sum(inv_lengths)/(N*(N-1))
def全局_效率(G,重量=无):
N=len(G)
如果N<2:
返回0
库存长度=[]
对于G中的节点:
如果重量为零:
长度=nx。单源最短路径长度(G,节点)
其他:
长度=nx。单源路径长度(G,节点,权重=权重)
inv=[1/x表示x的长度。如果x不是0,则值为()
#这里的变化
库存总和=总和(库存)
inv_length.追加(inv_sum)#添加结果,每个节点一个
返回和(库存长度)/(N*(N-1))

它给出了相同的结果(我检查过)。

是的,对不起。一点垃圾。。。现在它被更正了。你能提供实际的错误消息吗?它只是说:
内存错误:
,然后有空格显示你有多少内存?它是否至少告诉我们它得到了错误的行号?大致知道它发生在哪里会有帮助。是的,对不起。一点垃圾。。。现在它被更正了。你能提供实际的错误消息吗?它只是说:
内存错误:
,然后有空格显示你有多少内存?它是否至少告诉我们它得到了错误的行号?大致了解它发生在哪里会有所帮助。