繁体   English   中英

本征矩阵库按系数取模运算

[英]Eigen matrix library coefficient-wise modulo operation

在我正在研究的项目中的功能之一中,我需要找到特征库矩阵除以给定数字后每个元素的其余部分。 这是与我想做的Matlab等效的工作:

mod(X,num)

其中X是股息矩阵,num是除数。

最简单的方法是什么?

您可以将C ++ 11 lambda与unaryExpr

MatrixXi A(4,4), B;
A.setRandom();
B = A.unaryExpr([](const int x) { return x%2; });

要么:

int l = 2;
B = A.unaryExpr([&](const int x) { return x%l; });

为了完整起见,另一个解决方案是:

  1. 将X转换为特征数组(用于coeffwise操作),
  2. 应用模公式a%b = a - (b * int(a/b)) a- a%b = a - (b * int(a/b))

返回本征数组的C ++代码:

auto mod_array = X.array() - (num * (X.array()/num));

用C ++代码获取矩阵:

auto mod_matrix = (X.array() - (num * (X.array()/num))).matrix();

请注意,括号尤其重要,因为在(X.array()/num)中本征值会将(num * X.array()/num)X.array() ,这不是我们期望的。

具有特征数组的第一个版本比具有unaryExpr的版本快。 带有矩阵的第二个版本与带有unaryExpr的版本大约花费相同的时间。

如果X包含浮点数,你需要转换X.array()(X.array()/num)为int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM