2017-01-23 2 views
0

У меня есть матрица, определенная в Python: (название документа matrix.py)Импорт матрицы из Python в Pyomo

N = 4 
l = N 
k = N 


D = np.zeros((l,k)) 


for i in range(0,l): 
    for j in range(0,k): 
     if (i==j): 
      D[i,j] = 2 
     else: 
      D[i,j] = 0 
D[0,0] = (2*N**2+1)/6 

D[-1,-1] = -(2*N**2+1)/6 


print(D) 

Я хочу, чтобы использовать его в Pyomo, и я сделал:

import matrix 

. . .

m.f_x1 = Var(m.N) 
def f_x1_definition(model,i): 
    for j in m.N: 
     return m.f_x1[j] ==sum(D[i,j]*m.x1[j] for j in range(value(m.n))) 

m.f_x1_const = Constraint(m.N, rule = f_x1_definition) 

Но я получаю следующую ошибку: NameError: global name 'D' is not defined

Как я могу это сделать?

+2

Varia bles, определенные в модуле 'matrix.py', должны быть доступны с помощью синтаксиса' matrix.D'. – hpaulj

+0

Спасибо за ваш ответ. Но .. как я это делаю? Я не знаю, что вы имеете в виду. Спасибо, – Michael

ответ

0

При импорте модуля в Python с использованием синтаксиса

import foo 

все вещи, определенные в foo модуле будут доступны в foo имен. То есть, если foo.py содержит:

import numpy as np 
a = 5 
D = np.zeros((1,5)) 

при импорте модуля с import foo, то вы можете получить доступ к a и D с:

import foo 
print(foo.a) 
print(foo.D) 

Если вы хотите, чтобы вытащить символы из foo непосредственно в ваше местное пространство имен, вместо этого вы должны использовать синтаксис from ... import ...:

from foo import a,D 
print(a) 
print(D) 
Смежные вопросы