2017-01-23 39 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)