gpt4 book ai didi

python - 如何使用 ctypes 将 numpy ndarrays 传递给 c++ 函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:01 26 4
gpt4 key购买 nike

我花了两天时间弄清楚如何将 ndarrays 传递给 c/c++,但仍然没有找到任何可以正常工作的东西。
每件事都被记录得很糟糕且令人困惑。
我找到的唯一教程在 https://scipy.github.io/old-wiki/pages/C%2B%2B_Extensions_that_use_NumPy_arrays.html 中.
但是当我尝试运行 python 代码“myextension.py”时,它会引发 ImportError:没有名为 numpyndarrays 的模块。

我不想使用 cython 或 boost 或 python C-API。

这是我编译到共享库中的 C++ 代码“n.cpp”:

#include <iostream>
#include "ndarray.h"

extern "C" {

Ndarray<double, 3> myfunc(numpyArray<double> array1)
{
Ndarray<double,3> a(array1);
std::cout<<a.getShape(0); //this prints 0 and it means somthing is wrong

for (int i = 0; i < a.getShape(0); i++)
{
for (int j = 0; j < a.getShape(1); j++)
{
for (int k = 0; k < a.getShape(2); k++)
{
a[i][j][k] = 2.0 * a[i][j][k];
std::cout<<a[i][j][k]<<' '<<i<<' '<<j<<' '<<k<<'\n';// prints nothing because a.getShape(0) is 0.
}
}
}
return a;
}
}

起初,当我尝试编译这段代码时,编译器引发了 fatal error ,因为它找不到 ndarray.h。
我从 https://scipy.github.io/old-wiki/pages/ndarray2e5c.h?action=AttachFile&do=get&target=ndarray.h 手动下载了 ndarray.h 文件

这是我的python代码:

import numpy as np
import numpy.ctypeslib as ct

mylib = ct.load_library('n', '.')

def myfunc(array1):
return mylib.myfunc(array1.ctypes) # I also tried ct.as_ctypes(array1) instead of array1.ctypes with no success

a = np.ones((2,2,2)).astype(np.double)

myfunc(a)

此代码正确加载共享库,主要问题是如何将 numpy ndarray 转换为共享库的输入结构。
我还需要知道如何将共享库的输出转换为 numpy ndarray。

最佳答案

我发现使用 numpy C-API 是将 numpy 数组传递给 c++ 的最简单方法。
文档可以在 https://docs.scipy.org/doc/numpy/reference/c-api.html 上找到.

关于python - 如何使用 ctypes 将 numpy ndarrays 传递给 c++ 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57947950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com