关于python:Python将ndarray数据传递给C

5次阅读

共计 798 个字符,预计需要花费 2 分钟才能阅读完成。

Python numpy 库的 ndarray 数据结构应用很不便,这里记录一下如何将其传递给 C /C++ 代码,
间接上答案:
应用到的库:ctypes

C++ 代码局部(toPython.cpp):

#include <stdio.h>

extern "C" void showNdarray(int* data, int rows, int cols) {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {printf("data[%d][%d] = %d\n", i,j,data[i * rows + j]);
        }
    }
}

将 C ++ 代码编译成动态链接库:
g++ -o topython.so -shared -fPIC toPython.cpp

Python 代码局部:

import ctypes
import numpy as np

# 加载动静库
lcpp = ctypes.cdll.LoadLibrary
cpplib = lcpp("./topython.so")

def transfer_array_to_cpp() :
    data = np.array([[1,2,3,4,5],
                     [2,4,6,8,0]])
    dataptr = data.ctypes.data_as(ctypes.c_char_p)
    rows, cols = data.shape
    # 调用 C ++ 函数,将 ndarray 数据传递给 C ++
    cpplib.showNdarray(dataptr, rows, cols)
    
if __name__ == '__main__' :
    transfer_array_to_cpp()

Python 代码放在和 C ++ 链接库同一个目录下,运行即可:

data[0][0] = 1
data[0][1] = 0
data[0][2] = 2
data[0][3] = 0
data[0][4] = 3
data[1][0] = 2
data[1][1] = 0
data[1][2] = 3
data[1][3] = 0
data[1][4] = 4
正文完
 0