- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试从 Armadillo 立方体(使用管或切片)获取 vector/ double 时出现编译错误。如何从立方体到(行)vec?我找不到优雅的 cast/transform Armadillo 函数。
#include <RcppArmadillo.h>
//#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
void testarma() {
arma::mat B;
B << 0.555950 << 0.274690 << 0.540605 << 0.798938 << arma::endr
<< 0.108929 << 0.830123 << 0.891726 << 0.895283 << arma::endr
<< 0.948014 << 0.973234 << 0.216504 << 0.883152 << arma::endr
<< 0.023787 << 0.675382 << 0.231751 << 0.450332 << arma::endr;
B.print("B:");
// cubes ("3D matrices")
arma::cube Q(B.n_rows, B.n_cols, 4);
Q.slice(0) = B;
Q.slice(1) = 2.0 * B;
Q.slice(2) = 3.0 * B;
Q.slice(3) = 4.0 * B;
Q.print("Q:");
Rcpp::Rcout << "Q.tube(0, 1): " << std::endl << Q.tube(0, 1) << std::endl;
arma::rowvec whatIwant = arma::rowvec(4).fill(0.0);
for (int i = 0; i < 4; i++) {
// This gives an error. cannot convert 'arma::subview_col<double>' to 'double' in assignment
//whatIwant[i] = Q.slice(i).row(0).col(1);
Rcpp::Rcout << "At slice i=" << i << " value=" << Q.slice(i).row(0).col(1) << std::endl;
}
// But I don't want to write for loop. I am sure there exists
// an "armadillo" way (function) that does exactly this
// How to convert output of tube to rowvec?
}
最佳答案
我看到了三种方法:
as_scalar()
的循环将最终子集转换为 double
。rowvec
最后一个选项很可能是您想要的,因为它可以内联完成。
在您的情况下,操作将是:
arma::rowvec A = Q(arma::span(0), arma::span(1), arma::span::all);
这取自 subcube
文档的子集部分。
上述每种情况的实现如下所示。
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
void cube_subset_to_rowvec() {
// Sample data
arma::mat B;
B << 0.555950 << 0.274690 << 0.540605 << 0.798938 << arma::endr
<< 0.108929 << 0.830123 << 0.891726 << 0.895283 << arma::endr
<< 0.948014 << 0.973234 << 0.216504 << 0.883152 << arma::endr
<< 0.023787 << 0.675382 << 0.231751 << 0.450332 << arma::endr;
// cubes ("3D matrices")
arma::cube Q(B.n_rows, B.n_cols, 4);
Q.slice(0) = B;
Q.slice(1) = 2.0 * B;
Q.slice(2) = 3.0 * B;
Q.slice(3) = 4.0 * B;
// Objective
Rcpp::Rcout << "Q.tube(0, 1): " << std::endl << Q.tube(0, 1) << std::endl;
// Individually loading elements
arma::rowvec individual_elements(4);
for (int i = 0; i < 4; i++) {
individual_elements[i] = arma::as_scalar(Q.slice(i).row(0).col(1));
Rcpp::Rcout << "At slice i=" << i << " value=" << individual_elements[i] << std::endl;
}
// Subset to cube then use a shared memory pointer
arma::cube mem_ex = Q.tube(0,1);
arma::rowvec cub_subset = arma::rowvec(mem_ex.memptr(), mem_ex.n_elem, 1, false);
Rcpp::Rcout << cub_subset << std::endl;
// Direct subset to a rowvec
arma::rowvec direct_subset = Q(arma::span(0), arma::span(1), arma::span::all);
Rcpp::Rcout << direct_subset << std::endl;
}
运行:
cube_subset_to_rowvec()
输出:
Q.tube(0, 1):
[cube slice 0]
0.2747
[cube slice 1]
0.5494
[cube slice 2]
0.8241
[cube slice 3]
1.0988
At slice i=0 value=0.27469
At slice i=1 value=0.54938
At slice i=2 value=0.82407
At slice i=3 value=1.09876
0.2747 0.5494 0.8241 1.0988
0.2747 0.5494 0.8241 1.0988
关于c++ - Armadillo :将立方体 subview (管)转换为 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894422/
在许多网站上,他们谈论 Armadillo +其他东西。它们是什么意思? 我以以下形式使用 Armadillo 库 #include 在 Linux 环境中。 在这个网站上 http://nghia
尽管成功捕获了异常,但是运行以下代码仍然会生成一条错误消息,该消息将发送到stdout(不是stderr): Mat matrix_quantiles(const vector & quantiles
我需要将 Armadillo (当前版本为 5.100.1)作为 $HOME 中的本地库(集群应用程序,不能安装在每个计算节点上,但 $HOME 是共享文件夹)。我正在使用 cmake 来管理应用程序
如何在 Armadillo C++ 中获取非零位置(索引)数组和稀疏矩阵的值? 到目前为止,我可以轻松地构造一个具有一组位置(作为 umat 对象)和值(作为 vec 对象)的稀疏矩阵: // bat
NLopt 目标函数如下所示: double myfunc(const std::vector &x, std::vector &grad, void *my_func_data) x 是被优化的数据
我想将一个 numpy 数组发送到 Armadillo (C++) 并从 C++ 程序输出一个 numpy 数组。我没有在网上找到任何教程。有人可以指点我如何做到这一点吗? 最佳答案 您可以依靠 cy
我正在尝试使用 OpenMP 并行化一个 for 循环,它对 Armadillo 矩阵求和。我有以下代码: #include #include int main() { arma:
尽管已成功捕获异常,但运行以下代码仍会产生一条错误消息,该消息会转到 stdout(而非 stderr): Mat matrix_quantiles(const vector & quantiles,
我喜欢使用 Armadillo Linear Algebra Library .当将 Octave .m 文件移植到 C++ 时,它变得非常好,尤其是当您必须使用特征方法时。 然而,当我不得不从我的原
如何实现一个简单的合并函数来合并两个矩阵,每个矩阵都有两列和一个公共(public)列 x使用 Armadillo ?换句话说,我想要一个函数 my_merge_cpp(mat1, mat2)这将使用
我正在尝试使用 Armadillo 将由整数(即 arma::Mat )组成的矩阵分解为特征值和特征向量 但是,无论我将什么作为输入矩阵和输出 vector/矩阵类型,它总是会给我编译错误 当我将输入
我有一种方法可以在使用 Armadillo 的原子中使用脚本编译c++文件?我找不到任何与此相关的信息。 我已经安装了 Armadillo ,并尝试使用原子脚本编写一些基本代码: #include
我在 cygwin64(或 minGW)下使用 Armadillo 包(v.7.300.1)生成一个随机矩阵: #include int main(){ arma::mat(3,3, arma::
我目前正在 Visual Studio 环境中使用 Armadillo 在 BeagleBone Black 上进行交叉编译,以将 MATLAB 代码转换为 C++。 这是一个信号处理项目,所以我需要
我是 Armadillo 的新手。我有以下代码,我认为它效率低下。有什么建议可以提高内存效率和/或速度吗?关注armadillo docs和 Rcpp gallery ,我无法获得 .colptr的,
如何提高 Armadillo 复杂矩阵乘法结果的精度。它近似于小数点后 4 位 [这是结果的一个示例 (35.9682,-150.246) ] 但我想要至少 8 位小数的精度。谢谢 最佳答案 因为你似
假设我有一个稀疏矩阵。我将其定义为以下 CSV 格式: 行、列、值 1,1,5 1,2,10 在这种情况下,点 (1,1) 等于 5,点 (1,2) 等于 10。 从这种格式(假设有数千或数十万行)创
我在一个项目中使用 Armadillo ,总的来说它运行良好。该项目是基于 Xcode 的,到目前为止,我设法让它工作的唯一方法是(添加/usr/include/的 header 搜索路径似乎不起作用
在 C++ 中对 vector 或矩阵执行模运算符的最佳方法是什么 Armadillo ? vector 和矩阵类重载 % 运算符以执行逐元素乘法。尝试使用它会产生 invalid operands
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Precision of multiplication by 1.0 and int float conv
我是一名优秀的程序员,十分优秀!