我正在构建一个 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])
如果有人有解决方案,我很想听听:)
谢谢!
<小时/>附:我正在使用 Python3.6.7
和 luigi==2.8.9
。
最佳答案
Luigi 任务参数不仅仅是函数的参数 - 它们应该从命令行读取(如 luigi --module my_tasks MyLuigiTask --my_array '[2,3]'
因此它们仅限于基本类型,如果您需要更专业的类型(例如示例中的 numpy 数组),则无论如何都必须转换它们
关于python - 有没有办法将 numpy 数组作为 luigi.Parameter 中的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59545865/