我无法像numpy中那样从MxN矩阵中总结出1xN矩阵。
我用这样的本征来创建np.arange(9).reshape(3,3)
的矩阵:
int buf[9];
for (int i{0}; i < 9; ++i) {
buf[i] = i;
}
m = Map<MatrixXi>(buf, 3,3);
然后我计算沿行方向的均值:
m2 = m.rowwise().mean();
我想将m2
广播到3x3矩阵,并从m
中减去它,我该怎么做?
答案 0 :(得分:3)
Eigen中没有类似numpy的广播,您可以做的是重用您以前使用的相同模式:
m.colwise() -= m2
N.B .: m2
必须是向量,而不是矩阵。同样,尺寸越固定,编译器就越能生成有效的代码。
答案 1 :(得分:2)
您需要为值使用适当的类型,MatrixXi
缺少矢量运算(例如广播)。您似乎还有个坏习惯,那就是在初始化变量之前先声明变量。不要。
这应该有效
std::array<int, 9> buf;
std::iota(buf.begin(), buf.end(), 0);
auto m = Map<Matrix3i>(buf.data());
auto v = m.rowwise().mean();
auto result = m.colwise() - v;
答案 2 :(得分:0)
在这种情况下,虽然已经建议使用.colwise()
方法,但实际上也可以使用replicate
方法将向量广播到多列。
m -= m2.replicate<1,3>();
// or
m -= m2.rowwise().replicate<3>();
如果在编译时未知3
,则可以编写
m -= m2.rowwise().replicate(m.cols());