Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参数从Python脚本传递到C++;使用boostpython 我现在使用PosithPython和Boost NoMPy在C++中嵌入Python。 我有以下Python测试脚本: import numpy as np import time def test_qr(m,n): print("create numpy array") A = np.random.rand(m, n) print("Matrix A is {}".format(A)) print("Lets QR factorize this thing! Mathematics is great !!") ts = time.time() Q, R = np.linalg.qr(A) te = time.time() print("It took {} seconds to factorize A".format(te - ts)) print("The Q matrix is {}".format(Q)) print("The R matrix is {}".format(R)) return Q,R def sum(m,n): return m+n 我可以在C++中执行代码的一部分: namespace p = boost::python; namespace np = boost::python::numpy; int main() { Py_Initialize(); //initialize python environment np::initialize(); //initialize numpy environment p::object main_module = p::import("__main__"); p::object main_namespace = main_module.attr("__dict__"); // execute code in the main_namespace p::exec_file("/Users/Michael/CLionProjects/CythonTest/test_file.py",main_namespace); //loads python script p::exec("m = 100\n" "n = 100\n" "Q,R = test_qr(m,n)", main_namespace); np::ndarray Q_matrix = p::extract<np::ndarray>(main_namespace["Q"]); // extract results as numpy array types np::ndarray R_matrix = p::extract<np::ndarray>(main_namespace["R"]); std::cout<<"C++ Q Matrix: \n" << p::extract<char const *>(p::str(Q_matrix)) << std::endl; // extract every element as a std::cout<<"C++ R Matrix: \n" << p::extract<char const *>(p::str(R_matrix)) << std::endl; std::cout<<"code also works with numpy, ask for a raise" << std::endl; p::object sum = main_namespace.attr("sum")(10,10); int result = p::extract<int>(main_namespace.attr("sum")(10,10)); std::cout<<"sum result works " << result << std::endl; return 0;}_C++_Boost_Boost Python - Fatal编程技术网

参数从Python脚本传递到C++;使用boostpython 我现在使用PosithPython和Boost NoMPy在C++中嵌入Python。 我有以下Python测试脚本: import numpy as np import time def test_qr(m,n): print("create numpy array") A = np.random.rand(m, n) print("Matrix A is {}".format(A)) print("Lets QR factorize this thing! Mathematics is great !!") ts = time.time() Q, R = np.linalg.qr(A) te = time.time() print("It took {} seconds to factorize A".format(te - ts)) print("The Q matrix is {}".format(Q)) print("The R matrix is {}".format(R)) return Q,R def sum(m,n): return m+n 我可以在C++中执行代码的一部分: namespace p = boost::python; namespace np = boost::python::numpy; int main() { Py_Initialize(); //initialize python environment np::initialize(); //initialize numpy environment p::object main_module = p::import("__main__"); p::object main_namespace = main_module.attr("__dict__"); // execute code in the main_namespace p::exec_file("/Users/Michael/CLionProjects/CythonTest/test_file.py",main_namespace); //loads python script p::exec("m = 100\n" "n = 100\n" "Q,R = test_qr(m,n)", main_namespace); np::ndarray Q_matrix = p::extract<np::ndarray>(main_namespace["Q"]); // extract results as numpy array types np::ndarray R_matrix = p::extract<np::ndarray>(main_namespace["R"]); std::cout<<"C++ Q Matrix: \n" << p::extract<char const *>(p::str(Q_matrix)) << std::endl; // extract every element as a std::cout<<"C++ R Matrix: \n" << p::extract<char const *>(p::str(R_matrix)) << std::endl; std::cout<<"code also works with numpy, ask for a raise" << std::endl; p::object sum = main_namespace.attr("sum")(10,10); int result = p::extract<int>(main_namespace.attr("sum")(10,10)); std::cout<<"sum result works " << result << std::endl; return 0;}

参数从Python脚本传递到C++;使用boostpython 我现在使用PosithPython和Boost NoMPy在C++中嵌入Python。 我有以下Python测试脚本: import numpy as np import time def test_qr(m,n): print("create numpy array") A = np.random.rand(m, n) print("Matrix A is {}".format(A)) print("Lets QR factorize this thing! Mathematics is great !!") ts = time.time() Q, R = np.linalg.qr(A) te = time.time() print("It took {} seconds to factorize A".format(te - ts)) print("The Q matrix is {}".format(Q)) print("The R matrix is {}".format(R)) return Q,R def sum(m,n): return m+n 我可以在C++中执行代码的一部分: namespace p = boost::python; namespace np = boost::python::numpy; int main() { Py_Initialize(); //initialize python environment np::initialize(); //initialize numpy environment p::object main_module = p::import("__main__"); p::object main_namespace = main_module.attr("__dict__"); // execute code in the main_namespace p::exec_file("/Users/Michael/CLionProjects/CythonTest/test_file.py",main_namespace); //loads python script p::exec("m = 100\n" "n = 100\n" "Q,R = test_qr(m,n)", main_namespace); np::ndarray Q_matrix = p::extract<np::ndarray>(main_namespace["Q"]); // extract results as numpy array types np::ndarray R_matrix = p::extract<np::ndarray>(main_namespace["R"]); std::cout<<"C++ Q Matrix: \n" << p::extract<char const *>(p::str(Q_matrix)) << std::endl; // extract every element as a std::cout<<"C++ R Matrix: \n" << p::extract<char const *>(p::str(R_matrix)) << std::endl; std::cout<<"code also works with numpy, ask for a raise" << std::endl; p::object sum = main_namespace.attr("sum")(10,10); int result = p::extract<int>(main_namespace.attr("sum")(10,10)); std::cout<<"sum result works " << result << std::endl; return 0;},c++,boost,boost-python,C++,Boost,Boost Python,如果不使用exec函数,如何做到这一点 我尝试过以下方法: p::object sum = main_namespace.attr("sum")(10,10); int result = p::extract<int>(main_namespace.attr("sum")(10,10)); std::cout<<"sum result works " << result << std::endl; p::objectsum=main_namesp

如果不使用exec函数,如何做到这一点

我尝试过以下方法:

p::object sum = main_namespace.attr("sum")(10,10);
int result = p::extract<int>(main_namespace.attr("sum")(10,10));
std::cout<<"sum result works " << result << std::endl;
p::objectsum=main_namespace.attr(“sum”)(10,10);
int result=p::extract(main_namespace.attr(“sum”)(10,10));

这个问题相当琐碎。让我们看一下:

Python脚本:

#define BOOST_ALL_NO_LIB

#include <boost/python.hpp>
#include <boost/python/numpy.hpp>

#include <iostream>

namespace bp = boost::python;

int main()
{
    try {
        Py_Initialize();

        bp::object module = bp::import("__main__");
        bp::object globals = module.attr("__dict__");

        bp::exec_file("bpcall.py", globals);

        bp::object sum_fn = globals["sum"];
        int result = bp::extract<int>(sum_fn(1,2));
        std::cout << "Result (C++) = " << result << "\n";

    } catch (bp::error_already_set) {
        PyErr_Print();
    }

    Py_Finalize();
}
def sum(m,n):
    return m+n
Result (C++) = 3
输出:

#define BOOST_ALL_NO_LIB

#include <boost/python.hpp>
#include <boost/python/numpy.hpp>

#include <iostream>

namespace bp = boost::python;

int main()
{
    try {
        Py_Initialize();

        bp::object module = bp::import("__main__");
        bp::object globals = module.attr("__dict__");

        bp::exec_file("bpcall.py", globals);

        bp::object sum_fn = globals["sum"];
        int result = bp::extract<int>(sum_fn(1,2));
        std::cout << "Result (C++) = " << result << "\n";

    } catch (bp::error_already_set) {
        PyErr_Print();
    }

    Py_Finalize();
}
def sum(m,n):
    return m+n
Result (C++) = 3

这个问题相当琐碎。让我们看一下:

Python脚本:

#define BOOST_ALL_NO_LIB

#include <boost/python.hpp>
#include <boost/python/numpy.hpp>

#include <iostream>

namespace bp = boost::python;

int main()
{
    try {
        Py_Initialize();

        bp::object module = bp::import("__main__");
        bp::object globals = module.attr("__dict__");

        bp::exec_file("bpcall.py", globals);

        bp::object sum_fn = globals["sum"];
        int result = bp::extract<int>(sum_fn(1,2));
        std::cout << "Result (C++) = " << result << "\n";

    } catch (bp::error_already_set) {
        PyErr_Print();
    }

    Py_Finalize();
}
def sum(m,n):
    return m+n
Result (C++) = 3
输出:

#define BOOST_ALL_NO_LIB

#include <boost/python.hpp>
#include <boost/python/numpy.hpp>

#include <iostream>

namespace bp = boost::python;

int main()
{
    try {
        Py_Initialize();

        bp::object module = bp::import("__main__");
        bp::object globals = module.attr("__dict__");

        bp::exec_file("bpcall.py", globals);

        bp::object sum_fn = globals["sum"];
        int result = bp::extract<int>(sum_fn(1,2));
        std::cout << "Result (C++) = " << result << "\n";

    } catch (bp::error_already_set) {
        PyErr_Print();
    }

    Py_Finalize();
}
def sum(m,n):
    return m+n
Result (C++) = 3
main\u namespace.attr(“sum”)
——您没有在寻找属性。名称空间是一个python字典,您只需要一个与特定键对应的元素:
main\u namespace[“sum”]
main\u namespace.attr(“sum”)
——您不是在寻找属性。名称空间是一个python字典,您只需要一个与特定键对应的元素:
main\u名称空间[“sum”]