如何将默认的numpy数组参数传递给pybind11中的函数?

时间:2019-08-28 20:12:43

标签: python numpy pybind11

我正在定义一个以py :: array_t 和py :: array_t 作为参数的方法。如何告诉pybind11将这些参数默认为我选择的数组? (例如np.array([0,0,0]))

我尝试通过“参数”添加默认值_a = py :: array_T({0,0,0}) 但是当我称它为“数组的维数不正确时:3;预期为1'

m.def("foo", [](py::array_t<double> Arg1,                        
                py::array_t<bool> Arg2){

        auto bar = Arg1.unchecked<1>();
        auto bar2 = Arg2.unchecked<1>();

                    '''other simple code that doesn't alter bar or bar2'''

        return bar;
    },
    "Arg1"_a,
    "Arg2"_a = py_array<bool> ({0, 0, 0})
);

1 个答案:

答案 0 :(得分:0)

问题是您的默认参数的值是零长度尺寸的3d数组,而不是三个元素的1d数组。

您使用py_array<bool> ({0, 0, 0})调用的构造函数:

    explicit array_t(ShapeContainer shape, const T *ptr = nullptr, handle base = handle())
        : array_t(private_ctor{}, std::move(shape),
                ExtraFlags & f_style ? f_strides(*shape, itemsize()) : c_strides(*shape, itemsize()),
                ptr, base) { }

https://github.com/pybind/pybind11/blob/c9d32a81f40ad540015814edf13b29980c63e39c/include/pybind11/numpy.h#L861