为什么 np.sum() 剂量不起作用,如果我想在 lambda 函数中使用它



我非常抱歉这个愚蠢的问题,这是我第一次使用NumPy,所以我不知道我做错了什么有错误的行被标记为#ERROR我一定是不正确地访问了索引或者得到了错误类型的值提前感谢您的帮助

import numpy as np
p = {1:100, 2:120, 3:130, 4:100, 5:90,6:180}
M = {1:300, 2:120, 3:300}
I = [1,2,3,4,5,6]
J = [1,2,3]
st_per = {(1,1):1, (1,2):2, (1,3):3,
(2,1):4, (2,2):1, (2,3):1,
(3,1):5, (3,2):2, (3,3):4,
(4,1):3, (4,2):1, (4,3):2,
(5,1):1, (5,2):2, (5,3):1,
(6,1):0, (6,2):0, (6,3):0
}
st_per2p = np.empty([len(I), len(J)])
for i in range(len(I)):
for j in range(len(J)):
st_per2p[i,j] = st_per[i+1,j+1]
x0 = np.ones(len(st_per))*100
bounds = list((0,max(p.values())) for _ in range(st_per2p.size))
def ob(x):
ob_func = sum(x[idx]*st_per2p[idx//len(J), idx%len(J)] for idx in range(st_per2p.size))
return ob_func

def st_per1():
tmp = []
for idx in range(0, st_per2p.size, len(J)):
tmp_constr = {'type': 'eq','fun': lambda x, idx: p[idx//len(J) + 1]–np.sum(x[idx: idx + len(J)]),'args': (idx,)} #ERROR
tmp.append(tmp_constr)
return tmp

def st_per2():
tmp = []
for idx in range(0, st_per2p.size, len(I)):
tmp_constr = {'type': 'ineq','fun': lambda x, idx=idx: M[idx//len(I) + 1]–np.sum(x[idx: idx + len(I)])} #ERROR
tmp.append(tmp_constr)
return tmp

您应该包含整个错误消息:

SyntaxError: invalid character '–' (U+2013)

问题是,你认为在那两行中是减号的东西实际上不是减号——它是Unicode的"en dash";的性格。U + 2013。这可能来自于你用来编辑文本的工具。您应该进入纯文本编辑器(vim, nano等),并将这两个替换为一个简单的减号。

最新更新