Python npz文件作为pybind11中的输入

Python npz文件作为pybind11中的输入,python,c++,pybind11,Python,C++,Pybind11,我正在尝试用pybind11包装一个npz文件。我在Python中有以下参数,其中函数路径查找是在C++中: import testpy_path sourcefile1 = np.load('data1.npy') sourcefile2 = np.load('data2.npz') testpy_path.pathlookup(sourcefile1, sourcefile2) //error at sourcefile2 在C++中使用PybDun11,我尝试生成NUMPY输入源SU

我正在尝试用pybind11包装一个npz文件。我在Python中有以下参数,其中函数路径查找是在C++中:

import testpy_path
sourcefile1 = np.load('data1.npy')
sourcefile2 = np.load('data2.npz') 
testpy_path.pathlookup(sourcefile1, sourcefile2) //error at sourcefile2 

在C++中使用PybDun11,我尝试生成NUMPY输入源SURCEFIL1和SURCEFILE2这样的:

void pathlookup(py::array_t<double, py::array::c_style | py::array::forecast> sourcefile1, py::array_t<double, py::array::c_style | py::array::forecast> sourcefile2){
    std::vector<double> sources1(sourcefile1.size()); 
    std::memcpy(sources1.data(), sourcefile1.data(), sourcefile1.size() * sizeof(double)); 
}
void路径查找(py::array\u t sourcefile1,py::array\u t sourcefile2){
std::vector sources1(sourcefile1.size());
std::memcpy(sources1.data(),sourcefile1.data(),sourcefile1.size()*sizeof(double));
}
它适用于sourcefile1.npy文件,但不适用于numpy.npz文件。我的问题是,函数路径查找C++需要使用NPZ文件的参数,我如何将NPZ文件存储到向量?< /P>
谢谢

我对
numpy
不是很有经验,但我在手册中找到了以下内容:

当您将
load()
npz
文件一起使用时,将创建
numpy.lib.npyio.NpzFile
实例,该实例不是
array
实例。以下是手册中关于
NpzFile
的重要部分:

一个类似字典的对象,在构建时提供的压缩归档中延迟加载文件

NpzFile用于加载NumPy.npz数据归档格式的文件。它假定存档中的文件具有.npy扩展名,而忽略其他文件

数组和文件字符串在使用obj['key']的getitem访问或使用obj.f.key的属性查找时被延迟加载。使用obj.files和使用obj.zip的ZipFile对象本身可以获得所有文件(不带.npy扩展名)的列表

这意味着您可以通过以下方式访问阵列:

np.savez("out.npz", x=data)
x = np.load("out.npz")['x']
然后可以将
x
传递给函数

编辑:

如果希望通过
pybind
直接加载numpy数组,可以执行以下操作:

auto np = py::module::import("numpy");
py::dict d = np.attr("load")("out.npz");
for(auto k : d)
{
    std::cout << k.first.cast<std::string>() << std::endl;
    std::cout << k.second.cast<py::array>().size() << std::endl;
}
auto-np=py::module::import(“numpy”);
py::dict d=np.attr(“load”)(“out.npz”);
用于(自动k:d)
{

std::cout我对
numpy
不是很有经验,但这是我在手册中发现的:

当您将
load()
npz
文件一起使用时,将创建
numpy.lib.npyio.NpzFile
实例,这不是一个
array
实例。下面是手册中关于
NpzFile
的重要部分:

一个类似字典的对象,在构建时提供的压缩归档中延迟加载文件

NpzFile用于加载NumPy.npz数据存档格式的文件。它假定存档中的文件具有.npy扩展名,而忽略其他文件

数组和文件字符串在使用obj['key']的getitem访问或使用obj.f.key的属性查找中延迟加载。使用obj.files和使用obj.zip的ZipFile对象本身可以获得所有文件(不带.npy扩展名)的列表

这意味着您可以通过以下方式访问阵列:

np.savez("out.npz", x=data)
x = np.load("out.npz")['x']
然后可以将
x
传递给函数

编辑:

如果希望通过
pybind
直接加载numpy数组,可以执行以下操作:

auto np = py::module::import("numpy");
py::dict d = np.attr("load")("out.npz");
for(auto k : d)
{
    std::cout << k.first.cast<std::string>() << std::endl;
    std::cout << k.second.cast<py::array>().size() << std::endl;
}
auto-np=py::module::import(“numpy”);
py::dict d=np.attr(“load”)(“out.npz”);
用于(自动k:d)
{

STD::是的,我知道,我的问题是如何使用PybDun11?将Mimi的NPY文件导入C++中?@我编辑了答案,你可以把它作为<代码> PY:DITC< /C>。我知道,我的问题是我如何用PybDun11把NPY文件导入C++中?@ Mimi i编辑了答案,你可以把它作为<代码> PY:DICT< /C>。