小编Ras*_*los的帖子

为什么C++比使用boost的python快得多?

我的目标是在Python中为谱有限元素编写一个小型库,为此我尝试使用Boost扩展python与C++库,希望它能使我的代码更快.

class Quad {
    public:
        Quad(int, int);
        double integrate(boost::function<double(std::vector<double> const&)> const&);
        double integrate_wrapper(boost::python::object const&);
        std::vector< std::vector<double> > nodes;
        std::vector<double> weights;
};

...

namespace std {
    typedef std::vector< std::vector< std::vector<double> > > cube;
    typedef std::vector< std::vector<double> > mat;
    typedef std::vector<double> vec;
}

...

double Quad::integrate(boost::function<double(vec const&)> const& func) {

    double result = 0.;
    for (unsigned int i = 0; i < nodes.size(); ++i) {
        result += func(nodes[i]) * weights[i];
    }
    return result;
}

// ---- PYTHON WRAPPER ----
double Quad::integrate_wrapper(boost::python::object const& …
Run Code Online (Sandbox Code Playgroud)

c++ python performance boost

7
推荐指数
2
解决办法
875
查看次数

SymPy可以识别产品的衍生物吗?

在下面的程序中,SymPy似乎并不理解被积函数是产品的衍生物.有没有办法让它回归u*v

import sympy
x = sympy.symbols('x', real=True)
u = sympy.Function('u')
v = sympy.Function('v')
print((u(x) * v(x)).diff(x).integrate(x))
Run Code Online (Sandbox Code Playgroud)

打印:

> Integral(u(x)*Derivative(v(x), x) + v(x)*Derivative(u(x), x), x)
Run Code Online (Sandbox Code Playgroud)

symbolic-math sympy calculus derivative

6
推荐指数
1
解决办法
140
查看次数

在 sympy 表达式中查找函数

我正在寻找一种在 Sympy 表达式中查找功能参数的可靠方法。例如,在下面的示例中,如何f从检索operator

import sympy

x, y = sympy.symbols('x y')
f = sympy.Function('f')
operator = x*f(x, y).diff(x) + y*f(x, y)

print(operator.free_symbols)
# prints {x, y}
Run Code Online (Sandbox Code Playgroud)

python sympy

5
推荐指数
1
解决办法
897
查看次数

如何组织库中的头文件

假设我正在用C语言编写一个小型库,其中大部分源代码位于两个文件夹src/A和中src/B,并且头文件src/A/a.h需要包含在其中src/B/b.h。当为非库项目编写代码时,我通常会这样写

#include "B/b.h"
Run Code Online (Sandbox Code Playgroud)

ina.h并使用该-Isrc标志告诉编译器在哪里查找头文件。

现在假设我的库安装在本地,~/mylib并且我想使用来自a.h不同项目的函数。只需使用该文件即可包含该文件

#include "~/mylib/src/A/a.h"
Run Code Online (Sandbox Code Playgroud)

不起作用,因为~/mylib/src/B/b.h可能不属于搜索路径。我的问题是关于解决这个问题的规范方法。这可能很基础,但我没有用C语言做过任何高级编程,并且在网上尝试找到解决方案时也没有成功。

我想到的可能的解决方案如下:

  • 添加~/mylib到搜索路径,但如果库和客户端项目具有相同名称的头文件(例如src/helpers.h),则可能会导致问题。是否可以包含一个头文件,而不用我不需要的文件使搜索空间变得混乱?

  • 在库头文件中使用相对路径,但这感觉不太健壮。

谢谢。

c header-files

3
推荐指数
1
解决办法
1943
查看次数