如何使用pybind传递numpy数组的列表

2024-09-30 10:33:24 发布

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

我有一个用python编写的预处理器。这个预处理器计算未知数量的numpy数组。它们存储在一个列表中。为了进一步计算,我需要阅读cpp中numpy数组的列表。我不知道如何将列表中的元素转换为数组类型。在

在主.py在

import numpy as np
import myCPPAlgo

my_list = [ np.zeroes(shape=(10, 10), dtype=np.uint32) for _ in range(10)]
myCPPAlgo.call(my_list)

在主.cpp在

^{pr2}$

如何将pybind::句柄转换为py::array\?在


Tags: pyimportnumpy元素类型列表数量my
1条回答
网友
1楼 · 发布于 2024-09-30 10:33:24

简单地转换为数组:py::array_t<uint32_t> casted_array = py::cast<py::array>(array);。下面是完整的工作示例(模错误检查:)。在

#include <pybind11/pybind11.h>
#include <pybind11/numpy.h>
#include <pybind11/stl.h>

#include <iostream>

namespace py = pybind11;

int call(py::list listOfNumpyArrays)
{
    for( py::handle array: listOfNumpyArrays)
    {
        // howto transform?
        py::array_t<uint32_t> casted_array = py::cast<py::array>(array);

        auto requestCastedArray = casted_array.request();
        uint32_t nRows = requestCastedArray.shape[1];
        uint32_t nCols = requestCastedArray.shape[0];
        uint32_t* pBlockedArray = (uint32_t*) requestCastedArray.ptr;
        std::cerr << " rows x columns = " << nRows << " x " << nCols << std::endl;
        for (int i = 0; i < nCols; ++i) {
            for (int j = 0; j < nRows; ++j) {
                std::cerr << pBlockedArray[i*nRows + j] << " ";
            }
            std::cerr << '\n';
        }
    }
    return 0;
}

PYBIND11_MODULE(myCPPAlgo, m) {
    m.doc() = "";
    m.def("call", &call, "");
}

和测试代码:

^{pr2}$

相关问题 更多 >

    热门问题