ошибка с random.sample: повысить NotImplementedError ("> = и <= не работают с 0.") NotImplementedError:> = и <= не работают с 0 - PullRequest
0 голосов
/ 26 июня 2018

У меня проблема с этим кодом, я действительно не понимаю, почему он не может достичь второго цикла самого внутреннего для:

def remove_random_links(A,E):
    rs = random.sample(A.edges, E)
    A.remove_edges_from(rs)

N = 30
L = [0,60,30,40,30,30,20,40]
rep = 15
d = []
g = []

for j in range(rep):
    R = nx.grid_graph(dim=[N,N])  
    _deg = []
    _gap = [] 
    for i in L:
        remove_random_links(R,i)
        A = nx.adj_matrix(R)
        L = nx.laplacian_matrix(R) 
        eigwd, eigv = LA.eigh(L.todense())
        eigw = np.sort(eigwd)
        eigw0 = eigw[0]
        eigw1 = eigw[1]
        eigw2 = eigw[2]
        eigw3 = eigw[3]
        gap = eigw2 - eigw1
        deg = eigw3 - eigw2
        _deg.append(deg)
        _gap.append(gap)
        print("meow")    
    d.append(_deg)
    g.append(_gap)
    print("M")

mean_deg = [np.mean(d[i]) for i in range(rep)]    
mean_gap = [np.mean(g[i]) for i in range(rep)]
std_deg = [np.std(d[i]) for i in range(rep)]
std_gap = [np.std(g[i]) for i in range(rep)]

Он идет первым в цикле (тот, что в j), а затем в первый цикл в i, завершает его, а затем не может сделать второй из-за этой ошибки с функцией remove_random_links () , который дает мне следующую ошибку:

Файл "/Users/Sofia/Desktop/delta.py", строка 23, в remove_random_links (R, I)

Файл "/Users/Sofia/Desktop/delta.py", строка 9, в remove_random_links rs = random.sample (A.edges, E)

Файл "/anaconda3/lib/python3.6/random.py", строка 317, в примере если нет 0 <= k <= n: </p>

Файл "/Anaconda3/lib/python3.6/site-packages/scipy/sparse/compressed.py", строка 322, в ge «Сравнение разреженной матрицы со скаляром»

Файл "/Anaconda3/lib/python3.6/site-packages/scipy/sparse/compressed.py", строка 272, в неравенстве поднять NotImplementedError ("> = и <= не работают с 0.") </p>

NotImplementedError:> = и <= не работают с 0. </p>

1 Ответ

0 голосов
/ 26 июня 2018

Это потому, что вы используете одну и ту же переменную L дважды, один раз здесь

L = [0,60,30,40,30,30,20,40]

Затем переназначить его, перебирая здесь

for i in L:
        remove_random_links(R,i)
        A = nx.adj_matrix(R)
        L = nx.laplacian_matrix(R)   #<--------change variable name

Используйте разные имена переменных, и это должно сработать, попробуйте это, например,

import random
from numpy import linalg as LA
def remove_random_links(A,E):
    print A.edges, E
    rs = random.sample(A.edges, E)
    A.remove_edges_from(rs)

N = 30
L_edges = [0,60,30,40,30,30,20,40]    #<--- changed it to L_edges
rep = 15
d = []
g = []

for j in range(rep):
    R = nx.grid_graph(dim=[N,N])  
    _deg = []
    _gap = [] 
    for i in L_edges:     #<--- changed it to L_edges
        remove_random_links(R,i)
        A = nx.adj_matrix(R)
        L = nx.laplacian_matrix(R) 
        eigwd, eigv = LA.eigh(L.todense())
        eigw = np.sort(eigwd)
        eigw0 = eigw[0]
        eigw1 = eigw[1]
        eigw2 = eigw[2]
        eigw3 = eigw[3]
        gap = eigw2 - eigw1
        deg = eigw3 - eigw2
        _deg.append(deg)
        _gap.append(gap)
        print("meow")    
    d.append(_deg)
    g.append(_gap)
    print("M")

mean_deg = [np.mean(d[i]) for i in range(rep)]    
mean_gap = [np.mean(g[i]) for i in range(rep)]
std_deg = [np.std(d[i]) for i in range(rep)]
std_gap = [np.std(g[i]) for i in range(rep)] 
...