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

8aqjt8rx  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(123)

我非常抱歉这个愚蠢的问题,这是我第一次使用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
6gpjuf90

6gpjuf901#

您应该包含完整的错误消息:

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

问题是,你认为这两行中的减号实际上不是减号--它是Unicode“en dash”字符。U+2013。这可能来自你用来编辑文本的任何工具。你应该进入纯文本编辑器(vim,nano等),用一个简单的减号替换这两行。

相关问题