首页 > 解决方案 > 有没有办法让 numpy 数组作为 luigi.Parameter 中的默认值?

问题描述

我正在构建一个luigi任务,我希望将一个numpy数组作为输入参数之一的默认值:

import numpy as np
import luigi

class MyLuigiTask(luigi.Task):
    my_array = luigi.Parameter(default=np.array([2, 3]))

然后在运行时我收到以下错误:

Traceback (most recent call last):
  File "/home/dalyag/MyModule/my_nodule.py", line 124, in <module>
    execution_summary = luigi.build([MyLuigiTask()],
  File "/home/dalyag/.local/lib/python3.6/site-packages/luigi/task_register.py", line 88, in __call__
    param_values = cls.get_param_values(params, args, kwargs)
  File "/home/dalyag/.local/lib/python3.6/site-packages/luigi/task.py", line 419, in get_param_values
    if not param_obj.has_task_value(task_family, param_name):
  File "/home/dalyag/.local/lib/python3.6/site-packages/luigi/parameter.py", line 231, in has_task_value
    return self._get_value(task_name, param_name) != _no_value
  File "/home/dalyag/.local/lib/python3.6/site-packages/luigi/parameter.py", line 206, in _get_value
    if value != _no_value:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

据我所知,这是由Parameter试图了解默认值是否存在的类引起的。

由于默认值超过了值(它在值上保存了一个numpy数组),因此它无法辨别。

我尝试ListParameter改用,但得到同样的错误。

到目前为止我实现的解决方案是使用列表作为默认值,然后将其转换为数组,但它不是那么优雅...

class MyLuigiTask(luigi.Task):
    my_array = luigi.ListParameter(default=[2, 3])

如果有人有解决方案,我很想听听:)

谢谢!


ps 我正在使用Python3.6.7luigi==2.8.9

标签: pythonnumpyluigi

解决方案


Luigi 任务参数不仅仅是函数的参数 - 它们应该从命令行读取(因为luigi --module my_tasks MyLuigiTask --my_array '[2,3]'它们仅限于基本类型,如果您需要更专业的类型(例如您的例子)


推荐阅读