Boost Python Python 返回值给 C++ 程序

2024-09-30 08:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在C++中嵌入了Python,其中C++在Python中调用函数,应该返回一个值。下面是我的python代码:

def predict(window, g_slope, g_compliance):
    ps = model.predict_on_batch(
        x=np.asarray([window])
    )

    p_slopes = ps[0]
    p_compliances = ps[1]
    p_slopes = np.reshape(p_slopes, (np.shape(p_slopes)[1],))
    p_compliances = np.reshape(p_compliances, (np.shape(p_compliances)[1],))
    p_slope = p_slopes[-1]
    p_compliance = p_compliances[-1]

    n_slope = standardize_data(g_slope, means['GROUND_SLOPE'], variances['GROUND_SLOPE'])
    n_compliance = standardize_data(g_compliance, means['GROUND_STIFFNESS'], variances['GROUND_STIFFNESS'])

    #print('p_compliance: {0}, n_compliance: {1}, p_slope: {2}, n_slope: {3} '.format(str(p_compliance), str(n_compliance), str(n_slope), str(p_slope)))

    return(p_slope, n_slope, p_compliance, n_compliance)

它返回了我希望在C++程序中接收的元组。 我的C++程序调用这样的函数:

^{pr2}$

我试图提取从Python返回的元组,但收到以下错误消息:

Expecting an object of type tuple; got an object of type NoneType instead. 

我知道它不是none,因为我能够正确地访问tuple中的每个值。提取元组的正确方法是什么?在


Tags: datanpwindowpredictslopeps元组shape
1条回答
网友
1楼 · 发布于 2024-09-30 08:28:27

boost::python::object支持operator[],它允许按索引访问序列(列表、元组等)元素。这意味着您不需要将从函数返回的object强制转换为tuple,您可以直接访问其元素:

bp::object func = bp::import("my_module").attr("my_func");
bp::object foo = func();
bp::object bar = foo[0];

如果返回的python对象不支持按索引访问,则将引发异常。注意,您可能仍然需要将索引提取的序列元素转换为各自的C++类型。在

<>通常可以从C++中“以”为函数对象传递参数,而不干扰原始的^ {< CD5>}指针。Boost.Python在大多数情况下进行必要的转换。在

相关问题 更多 >

    热门问题