[英]How to pass a default numpy array argument to a function in pybind11?
[英]How with pybind11 to bind a function that takes as argument a numpy.array() with, for instance, a shape (10, 10, 3)?
我想編寫一個可以采用多維numpy數組,而不僅僅是2D的函數。
void compute(Eigen::Ref<Eigen::MatrixXd> array3d) {
// change the array in-place
// ...
}
要么
Eigen::MatrixXd &compute() {
// create array
// ...
// and return it
}
我在這里使用Eigen只是為了描述目標,我相信Eigen不支持3D或更多維的數組。
感謝您的反饋和耐心,因為我不熟悉Pybind11或Eigen。
從pybind信息中,您可以提取尺寸信息。
例如,這是我做的內部音頻工具包與m
要構建當前Python模塊:
py::class_<MyClass>(m,"name")
.def("set_pointer", [](MyClass& instance, const py::array_t<DataType>& array)
{
gsl::index channels = 1;
gsl::index size = array.shape(0);
if(array.ndim() == 2)
{
channels = array.shape(0);
size = array.shape(1);
}
// Call using array.data() and possibly add more dimension information, this is specific to my use case
instance.set_pointer(array.data(), channels, size);
});
由此,您可以創建Eigen::Map
調用,而不是創建可在模板代碼中使用的類似Eigen的矩陣。
基本上,pybind11允許您創建一個lambda,您可以在其中創建用例的包裝。 同樣的返回方法,您可以獲取Eigen類,創建一個用Eigen數據填充的pybind數組。
Eigen具有您也可以使用的Tensor類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.