我正在尝试设置我的项目以使用 autotools 构建系统进行分发。但是,当涉及到包含一些额外的库时,我遇到了问题。
我的代码依赖于几个库:
我写的一个(我会叫 libfoo)
一个是第三方(我将称之为 libbar)
Eigen3(这只是头文件)
这些都已经编译并安装在我的 $HOME 目录中。我不需要将它们构建为这个项目的一部分。
我需要的标志是
-std=c++11 (Got this taken care of)
Run Code Online (Sandbox Code Playgroud)
和
-I/path/to/include/libfoo (or libbar, or Eigen3)
Run Code Online (Sandbox Code Playgroud)
和
-L/path/to/lib/ (Where libfoo and libbar reside)
Run Code Online (Sandbox Code Playgroud)
和
-lfoo
Run Code Online (Sandbox Code Playgroud)
编译和链接 libfoo 和 libbar
问题是我想设置检查 libfoo 和 libbar 及其标头的存在(我已经检查了 Eigen3 设置)。问题是像 AC_CHECK_HEADERS 和 AC_CHECK_LIB 这样的宏似乎不想包含所需的 CPPFLAGS 或 LDFLAGS,无论我如何尝试定义它们,因此配置步骤失败。
AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([libfoo/foo.h], , [echo "Did not find libfoo headers"; exit -1])
AC_LANG_POP([C++])
Run Code Online (Sandbox Code Playgroud)
阅读 config.log 显示 configure 正在尝试使用
g++ -std=c++11 (other flags...)
Run Code Online (Sandbox Code Playgroud)
但由于缺少上述标志而失败(错误是“找不到 Eigen3/dense”或类似的,表明缺少 -I 标志)
我是 autotools 的新手,所以我可能会遗漏一些明显的东西,但我已经阅读了大量的帮助和手册,但到目前为止还没有弄清楚我需要做什么来设置它。 …
我有一个从实验中获取的 MxN 值数组。其中一些值无效并设置为 0 以指示此类情况。我可以使用构造有效/无效值的掩码
mask = (mat1 == 0) & (mat2 == 0)
Run Code Online (Sandbox Code Playgroud)
它产生一个 MxN 布尔数组。应该注意的是,屏蔽位置并不完全遵循矩阵的列或行 - 因此简单地裁剪矩阵不是一个选择。
现在,我想沿数组的一个轴取平均值(EG 最终得到一个 1xN 数组),同时在平均值计算中排除那些无效值。直觉上我以为
np.mean(mat1[mask],axis=1)
Run Code Online (Sandbox Code Playgroud)
应该这样做,但是该mat1[mask]操作会生成一个一维数组,它似乎只是masktrue 的元素 - 当我只想要数组的一维上的平均值时,这没有帮助。
有没有“python-esque”或numpy的方法来做到这一点?我想我可以使用蒙版来设置蒙版元素并NaN使用np.nanmean- 但这仍然感觉有点笨拙。有没有办法“干净”地做到这一点?
我基本上想看看是否有可能将Python代码编译成C++程序,以便生成单个二进制文件,然后使用C++代码中的函数调用(编译的)python代码.
背景:我有一个C++代码可以完成一些工作并生成我想要绘制的数据.然后,我使用SciPy编写了一个单独的Python脚本,该脚本读取输出数据,处理它并将其绘制到文件中.一切都按原样运作.
基本上,我想象的是:
void plotstuff() {
my_python_func(); // This is the python script compiled into the c++ binary
}
Run Code Online (Sandbox Code Playgroud)
我不需要在python代码和C++代码之间传递任何东西,除了确保它在同一目录中执行.如果我可以传递字符串参数,它可能会使事情变得更容易,但再次 - 不是必需的.
这可以实现吗?或者它通常是一个坏主意,我应该坚持让我的C++和python分开?