当我调用SCIPY函数时,我当然不想查找文档[开玩笑]但稍微更严重的是我不想接受所有返回值。例如,我正在调用FMIN_BFGS()。它可以选择返回一堆值,我只想保持返回的最小值。所以我输入
res = fmin_bfgs(...)
死于“太多值以解包”。我以为我读过这会起作用
res, = fmin_bfgs(...)
但它给出了相同的错误消息。最后有效的是使用问题#431866
的答案res, _, _ , _ = fmin_bfgs(...)
但是真的吗?我是否必须检查文档并计算返回值的数量并使用那么多下划线,或者是否有更多Pythonesque方法来忽略除第一个值之外返回的所有内容。
谢谢,J。
答案 0 :(得分:0)
实际上,您的第一个示例将起作用:
res = fmin_bfgs(...)
然后你可以用res [0]来引用你感兴趣的值。
仅在python 3中,你也可以这样做:
res, *_ = fmin_bgfs(...)
将元组中的第一个值分配给res,将剩余值分配给_的新元组。
答案 1 :(得分:0)
我的哑巴错误。我的代码实际上是什么样的
res, l2e = fmin_bfgs(...)
除了我没有将res定义为数组,就像我应该做的那样。所以解释器认为我给了一个size = 2向量来填充从fmin_bfgs回来的size = N回答。一旦我在调用之前定义了res = np.zeros(N),那么一切正常。
抱歉浪费了你的时间......
答案 2 :(得分:0)
这样的函数返回一个值元组。 return语句类似于
return arr1, scalar2, label3
当发生这种情况时,您有几种选择:
mytuple = foo(...) # accept the tuple
print(len(mytuple)) # look at the number of items
val1= mytuple[0] # select the 1st item
或者您可以使用元组解包选项
a, b, c = mytuple
a, b, c = foo(...)
a, _, _ = foo(...) # _ is just a name for unimportant value
您可以立即使用索引
a = foo(...)[0]
在
a, = foo(...)
a, = (12,) # works
a, = (12,12,12) # unpacking error
仅在foo
返回单个项元组时才有效。作为一种强制执行“规则”的方法,它最有用,即该函数返回该元组计数。左侧,
的功能就像右侧一样 - 指定一个元组。
所以这是一个基本的Python问题 - how to unpack or select items from a tuple
。这对Scipy来说并不特别。
=====
但是快速浏览一下fmin_bfgs
表示我可以获得一个项目(不是元组解包),如果我要求完整输出,则为7个项目,如果我要求更多值,则为8个项目。