![](/img/trans.png)
[英]performance of coefficient-wise array operations of the eigen library with mkl backend
[英]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; });
为了完整起见,另一个解决方案是:
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.