我怎么能像 numpy 那样从 MxN 矩阵中减去 1xN 特征矩阵?
How could I subtract a 1xN eigen matrix from a MxN matrix, like numpy does?
我无法像在 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
中减去它,我该怎么做?
Eigen 中没有类似 numpy 的广播可用,您可以做的是重用您使用过的相同模式:
m.colwise() -= m2
N.B.: m2
需要是向量,而不是矩阵。而且维度越固定,编译器生成的代码效率就越高。
您需要为您的值使用适当的类型,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;
虽然在这种情况下应该优先使用已经建议的 .colwise()
方法,但实际上也可以使用 replicate
方法将向量广播到多个列。
m -= m2.replicate<1,3>();
// or
m -= m2.rowwise().replicate<3>();
如果编译时不知道3
,可以写
m -= m2.rowwise().replicate(m.cols());
我无法像在 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
中减去它,我该怎么做?
Eigen 中没有类似 numpy 的广播可用,您可以做的是重用您使用过的相同模式:
m.colwise() -= m2
N.B.: m2
需要是向量,而不是矩阵。而且维度越固定,编译器生成的代码效率就越高。
您需要为您的值使用适当的类型,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;
虽然在这种情况下应该优先使用已经建议的 .colwise()
方法,但实际上也可以使用 replicate
方法将向量广播到多个列。
m -= m2.replicate<1,3>();
// or
m -= m2.rowwise().replicate<3>();
如果编译时不知道3
,可以写
m -= m2.rowwise().replicate(m.cols());