【问题标题】:Python return ignores multiple argumentsPython return 忽略多个参数
【发布时间】:2015-03-05 17:33:55
【问题描述】:

我创建了一个返回两个值的函数,但每当我执行它时,我只得到第一个值。有什么问题???

import numpy as np
from sklearn.linear_model import Lasso

def lasso_weighted(X,s,lam):
    n_samples, n_features = X.shape
    alpha = lam*2*np.sqrt(n_samples)

    g = lambda w: np.sqrt(np.abs(w))
    gprime = lambda w: 1. / (2. * np.sqrt(np.abs(w)) + np.finfo(float).eps)
    p_obj = lambda w: 1. / (2 * n_samples) * np.sum((s - np.dot(X, w)) ** 2) \
                    + alpha * np.sum(g(w))

    weights = np.ones(n_features)
   # n_lasso_iterations = 5
    counter=1
    frpr=0
    objpr=10**6
    t=10**-2

    #for k in range(n_lasso_iterations):
    while True:
        print counter
        X_w = X / weights[np.newaxis, :]
        clf = Lasso(alpha=alpha, fit_intercept=False)
        clf.fit(X_w, s)
        fr = clf.coef_ / weights
        weights = gprime(fr)
        print p_obj(fr)  # should go down
 #       if max(abs(fr-frpr))<t:
        if objpr<p_obj(fr):
            break           
        counter=counter+1
        frpr=fr
        objpr=p_obj(fr)

    return objpr,frpr

所以如果我调用我的程序

import lassoweight as ls
a,b=ls.lasso_weighted(X,S,v)

我只收到一个错误,太多值无法解压。如果我运行ls.lasso_weighted(X,S,v) 然后作为输出,我只会得到返回的第一个参数。如果我在退货时更改订单,我会选择另一个,但我永远不能同时接受它们......)

这是我看不到的完全愚蠢的东西吗? 谢谢

【问题讨论】:

  • 如果您在return 之前打印出objprfrpr,您会得到什么? lasso_weighted() 究竟返回了什么值?
  • 我得到了正确的值,例如 objpr 是 91.100 附近的值,而表 [66,1]
  • 而lasso_weighted返回的值是第一个参数的正确值
  • 只需返回一个包含这两个值的元组,然后在需要时分配它们或继续使用该元组...
  • 是的,这可能是一个我会尝试的解决方案,但为什么会发生这种情况?

标签: python function return


【解决方案1】:

今天我再次打开 Canopy(我昨天也做了同样的事情)它运行正确,返回 2 个变量....可能是错误或卡住了我不知道发生了什么...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多