在Python中忽略scipy的返回值

时间:2016-10-21 16:32:32

标签: python scipy

当我调用SCIPY函数时,我当然不想查找文档[开玩笑]但稍微更严重的是我不想接受所有返回值。例如,我正在调用FMIN_BFGS()。它可以选择返回一堆值,我只想保持返回的最小值。所以我输入

res = fmin_bfgs(...)

死于“太多值以解包”。我以为我读过这会起作用

res, = fmin_bfgs(...)

但它给出了相同的错误消息。最后有效的是使用问题#431866

的答案
res, _, _ , _ = fmin_bfgs(...)

但是真的吗?我是否必须检查文档并计算返回值的数量并使用那么多下划线,或者是否有更多Pythonesque方法来忽略除第一个值之外返回的所有内容。

谢谢,J。

3 个答案:

答案 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个项目。