问题标签 [armadillo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5676 浏览

c++ - 比较 blitz++、犰狳、boost::MultiArray

我对 blitz++、armadillo、boost::MultiArray 与以下代码进行了比较(借自一篇旧帖子

在windows,VS2010上,结果是

在windows,intel c++上,结果是

奇怪的东西:

要使用 intel c++ 编译器编译 blitz++,blitz/intel/ 文件夹中需要一个名为 bzconfig.h 的文件。但是没有。我只是复制 blitz/ms/bzconfig.h 中的那个。这可能会给出非最佳配置。任何人都可以告诉我如何使用 intel c++ 编译器编译 blitz++?在手册中,它说运行 bzconfig 脚本以获取正确的 bzconfig.h。但我不明白这是什么意思。

非常感谢!

补充一些我的结论:

0 投票
1 回答
2642 浏览

r - RcppArmadillo 传递用户自定义函数

考虑以下 R 代码,

用户可以传递一个函数名“fun”,由caller. 我希望对RcppArmadillo对象执行相同的任务(显然,作为更复杂任务的一部分)。该函数将在 中定义C++,并且用户通过引用其名称在 R 级别选择它:

或者

等等

这是我对调用函数的天真尝试,甚至无法编译:


编辑:在遵循 Dirk 的建议来查看 RcppDE 后修改了示例。

0 投票
2 回答
1539 浏览

c++ - 当针对奇异矩阵时,solve() 崩溃

我正在尝试以最小二乘法求解线性方程组。使用犰狳及其求解函数,我想计算抛物线拟合的三个系数。

与 CtC=

和 Ctb=

显然 solve() 无法解决它,甚至 Matlab 警告:

一般来说,犰狳或c ++中是否有任何解决方法或更强大/更复杂的方法?谢谢

0 投票
0 回答
828 浏览

c++ - Windows 7 上带有 MinGW G++ 错误可执行文件的犰狳

如果我尝试编译代码

使用 MinGW g++ 和最新的犰狳(3.6.1),它在我的 windows XP 上运行良好,但如果我编译它并在 windows 7 上运行它,我会得到:“一个问题导致程序停止正常工作。”

什么可能导致这种情况?

我已经尝试过 4.6.2 和 4.7.2(下一个包含最新的 g++ -v):

使用内置规范。COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.7.2/lto-wrapper.exe 目标:mingw32 配置:../gcc-4.7.2/configure --enable-语言=c,c++,ada,fortran,obj c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgo mp --disable-win32-registry --enable- libstdcxx-debug --disable-build-poststage1- with-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw 线程模型:win32 gcc 版本 4.7.2 (GCC)

请注意,在这个阶段,我什至没有链接任何像 LAPACK 这样的库。我也试过取消注释

//#define ARMA_USE_LAPACK

在 config.cpp 中,但没有效果。顺便说一句,我可以在没有犰狳的情况下编译 c 代码,这在两个系统上都没有问题。只有添加犰狳才会引起问题。

更新:如果我按 ctrl-c 我得到:

forrtl:错误(200):由于 control-C 事件而导致程序中止图像
PC 例程行源 lapack_win32_MT.d 103A49EA Unknown Unknown Unknown lapack_win32_MT.d 1034CD0E Unknown Unknown Unknown lapack_win32_MT.d 1035B254 Unknown Unknown Unknown kernel32.dll
755B6C19 Unknown Unknown Unknown kernel32。 dll
75513677 Unknown Unknown Unknown ntdll.dll
77DFC002 Unknown Unknown Unknown ntdll.dll
77DFBFD5 Unknown Unknown Unknown

更新:在另一个 Windows 7 系统上,我确实设法执行,但在编译时收到以下消息(编译犰狳包中的 example2.cpp 时):

谢谢。

0 投票
1 回答
1778 浏览

multicore - 犰狳线性系统求解器(带有openblas)

我一直在测试各种开源代码来求解 C++ 中的线性方程组。到目前为止,我发现最快的是犰狳,也使用了 OPENblas 包。为了解决一个密集的线性 NxN 系统,其中 N=5000 在我的系统上大约需要 8.3 秒,这真的非常快(没有安装 openblas,大约需要 30 秒)。

这种增加的一个原因是犰狳+openblas 似乎可以使用多线程。它在我的两个内核上运行,而没有 openblas 的犰狳只使用 1 个。我有一个 i7 处理器,所以我想增加内核数量,并进一步测试它。我正在使用 ubuntu,所以从 openblas 文档中我可以在终端中执行以下操作:

导出 OPENBLAS_NUM_THREADS=4

但是,再次运行代码似乎并没有增加正在使用的内核数量或速度。我做错了什么,还是 2 是使用犰狳的“solve(A,b)”命令的最大数量?我无法在任何地方找到犰狳的源代码来查看。

顺便说一句,有人知道犰狳/openblas 用于解决 Ax=b 的方法(具有并行性的标准 LU 分解或其他方法)吗?谢谢!

编辑:实际上,在使用突触包管理器安装 openblas 时,停留在 2 的核心数量似乎是一个错误,请参见此处。从源代码重新安装允许它检测我实际拥有的核心数量 (8)。现在我可以使用 export OPENBLAS_NUM_THREADS=4 等来管理它。

0 投票
1 回答
726 浏览

visual-c++ - 创建犰狳 DLL 时未解决的外部符号错误

我正在尝试在 Win XP 上使用 VC++ 2010 创建Armadillo线性代数库的动态库,该库最初是一个仅包含标头的库。我创建了一个新项目,添加了源文件,并创建了一个 .def 文件,指定仅导出一个 Armadillo 函数(Col 类),但 Col 类出现 LNK2001 错误。我可以创建一个 main 并很好地使用 Col,所以我认为 Col 被正确包含。

我还尝试在函数定义上使用“__declspec(dllexport)”并编译,但由于使用 dumpbin 没有显示任何内容,因此函数未导出,并且我无法成功使用 .dll。我在这里错过了什么吗?

0 投票
1 回答
1141 浏览

c++ - 打印犰狳矢量/矩阵后禁用换行符(C++)

我将 C++ 与犰狳库一起使用。当我打印一个向量或矩阵时,在向量/矩阵之后总是包含一个换行符,即使使用 .raw_print() 也是如此。有什么简单的方法可以禁用这种行为吗?

最小的例子:

我正在使用 GCC 版本 4.4.6 在 linux 上编译和运行

0 投票
1 回答
1303 浏览

r - 如何使用 RcppArmadillo 绘制多项分布样本?

问题是我有一个变量arma::mat prob_vec并且想要与rmultinom(1, 1, prob_vec)R 中相同的东西。

我找到了rmultinomRcppArmadillo 提供的函数有一个奇怪的参数要求,这与 R 中的不同!所以它不会通过编译。

我只是想知道如何在 RcppArmadillo 或等效地在 Armadillo 中绘制所需的样本。如果我需要获取指针或转换我的prob_vec变量,请告诉我如何。

非常感谢!

0 投票
1 回答
600 浏览

c++ - 如何处理犰狳中“查找”的空返回?

我有一个ivec C1并且做了,说,sum( C1.elem(find( C1==1 )) )

如果没有元素为 1,我希望得到零回报C1,但它给了我一个错误,说Mat::elem(): given object is not a vector

我尝试使用(find(C1==1)).is_empty(),但这没有被接受,因为它告诉我它没有提供is_empty返回find. 然后我尝试conv_to<uvec>::from(find(C1==1))但是当C1它确实是空的时它不允许这样的转换。

任何人都可以帮我解决这个问题吗?谢谢!!

0 投票
0 回答
521 浏览

c++ - 犰狳 C++ 比较

我很困惑。为什么会这样?