2017-01-23 35 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 'matrix.py'模块中定义的bles必须用'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)