使用 python 驱动程序将数据传入和传出 C++ 代码

Posted

技术标签:

【中文标题】使用 python 驱动程序将数据传入和传出 C++ 代码【英文标题】:Passing data to and from C++ code using a python driver 【发布时间】:2016-09-08 00:08:56 【问题描述】:

我正在尝试将数组从 python 驱动程序传递给 c++ 函数。我传递给 c++ 函数的数组之一是结果数组。我知道数据正在正确地传递给代码,但在返回的路上似乎被截断了。我在小数点后失去了精度。有什么想法我哪里出错了吗?下面是代码的简化版本和结果输出。

python 代码:

import ctypes
from ctypes import *

def get_calculate_windows():
    dll = ctypes.CDLL('./cppFunctions.so', mode=ctypes.RTLD_GLOBAL)
    func = dll.calculate_windows
    func.argtypes = [POINTER(c_float), POINTER(c_float), c_size_t]
    return func

def calculate_windows(data, answer, size):
    data_p = data.ctypes.data_as(POINTER(c_float))
    answer_p = answer.ctypes.data_as(POINTER(c_float))

    __calculate_windows(data_p, answer_p, size)


###### MAIN FUNCTION #####

data = np.array(myData, dtype=np.float32)
ans = np.array(myAnswer, dtype=np.float32)

print ans[:10]
calculate_windows(data, ans, myLength)
print ans[:10]

c++代码:

extern "C" 

    void calculate_windows(float *h_data, float *result, size_t size ) 

        for (int i=0; i<size; i++ ) 
            result[i]=i/10;
        

    

输出:

[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]

输出应该是什么:

[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
[ 0.0  0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]

【问题讨论】:

result[i]=i/10; : 这里有12个空格是有原因的吗? 乱七八糟的编辑。我删除了换行符 【参考方案1】:

我知道数据正在正确地传递给代码,但在返回的路上似乎被截断了。我在小数点后失去了精度。有什么想法我哪里出错了吗?

您使用的是整数除法而不是浮点除法。

您可以使用以下方法解决此问题:

result[i] = i / 10.;

代替:

result[i] = i / 10;

【讨论】:

以上是关于使用 python 驱动程序将数据传入和传出 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中将变量传入和传出函数[重复]

如何在 Python 中将大量变量传入和传出函数?

将变量传入和传出 PayPal

如何将变量传入和传出AsyncTasks?

在 Bash 脚本中通过管道传入/传出剪贴板

路由器是不是需要更改传入 IP 数据包中的任何字段,然后才能将其发送到传出链路上?为啥?