如何打包和解压缩类型为numpy.ndarray的列表

时间:2017-10-11 02:17:37

标签: python numpy

我获得了以下代码,但我想根据自己的需要对其进行自定义。给定方法调用:

        best_n_hidden = hyperparam_selection(
            train_network,
            n_hidden_range=[10, 128],
            func_args=[tr_X, ts_X, tr_y, ts_y],
            n_iter=6,
        )

def hyperparam_selection(func, n_hidden_range, func_args=None, n_iter=20):
    if func_args is None:
        func_args = []

    scores = []
    parameters = []

    min_n_hidden, max_n_hidden = n_hidden_range
    n_hidden_choices = np.arange(min_n_hidden, max_n_hidden + 1)

    # To be able to perform gaussian process we need to
    # have at least 2 samples.
    n_hidden = random.randint(min_n_hidden, max_n_hidden)
    score = func(n_hidden, *func_args) # ISSUE HERE!!
    parameters.append(n_hidden)
    scores.append(score)
    n_hidden = random.randint(min_n_hidden, max_n_hidden)

问题是tr_X, ts_X, tr_y, ts_y属于<type 'numpy.ndarray'>类型,因此当使用行*func_args中的星号运算符score = func(n_hidden, *func_args)解包它们时,会给我一个问题。我不知道numpy中我可以用于此案numpy.stacknumpy.packbits的等效打包和解包方法是什么。任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:0)

在这种情况下,数组并没有什么特别之处。

在通话中,func_args=[tr_X, ts_X, tr_y, ts_y],[...]是一个包含4个项目的列表。它并不重要。

在函数内部,看起来func_args始终是一个列表,可能是空列表[]

在通话score = func(n_hidden, *func_args)中,该列表将展开为。

我希望有一个

def func(n_hidden, x1, x2, y1, y2):
     ...

可以工作(如果你总是传递4个对象)。或

def func(n_hidden, *args):
    n = len(args)
    # args is a tuple.
    if len(args)==4:
        x1, x2, y1, y2 = args
        # or work with
        args[0], args[1], etc.

您没有打包或拆包阵列。相反,你正在处理数组的列表或元组。