Python返回忽略多个参数

时间:2015-03-05 17:33:55

标签: python function return

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

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)然后作为输出,我只得到返回的第一个参数。如果我在返回时更改顺序,我会接受另一个,但我永远不能同时接受它们......)

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

1 个答案:

答案 0 :(得分:1)

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