在我所从事的项目中的一个函数中,当除以给定的数时,我需要找到本征库矩阵中的每个元素的其余部分。这里的Matlab相当于我想要做的事情:
mod(X,num)
其中X是红利矩阵,num是除数。
实现这一目标的最简单方法是什么?
发布于 2016-03-04 13:18:13
可以将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; });
发布于 2017-03-30 03:34:58
为了完整起见,另一个解决办法是:
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
https://stackoverflow.com/questions/35798698
复制相似问题