python - 有没有办法让 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.7
和luigi==2.8.9
。
解决方案
Luigi 任务参数不仅仅是函数的参数 - 它们应该从命令行读取(因为luigi --module my_tasks MyLuigiTask --my_array '[2,3]'
它们仅限于基本类型,如果您需要更专业的类型(例如您的例子)
推荐阅读
- android - 在 GlSurfaceView.Renderer 实现中旋转视频的矩阵(帧)
- dart - 如何在飞镖中进行从超类到子类的回调
- c++ - 其中之一与其他不同:为什么 std::vector::size 在所有主要标准库实现中都以指针的形式实现?
- c++ - HC-05蓝牙模块需要每指令3次
- java - Java 泛型:无法转换列表
> 列出 - angular - 如何多选角
- javascript - 遍历打字稿中的子元素
- python - PIL 以红色而不是灰度写入像素
- mysql - MySQL 使用记录 ID 设置默认字段值连接
- javascript - TypeError: i.hasOwnProperty 不是 QA 环境中的函数