0

我在 Python 中定义了一个矩阵:(文档的名称 matrix.py)

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

我该怎么做?

4

1 回答 1

1

当您使用语法在 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)
于 2017-01-24T16:59:40.510 回答