Собственное не может создать вектор из среднего значения матрицы напрямую - PullRequest
0 голосов
/ 05 января 2019

Я новичок в Eigen, и я хотел бы нормализовать матрицу по строкам, поэтому мой код выглядит так:

int buf[9];
for (int i{0}; i < 9; ++i) {
    buf[i] = i;
}
m = Map<MatrixXi>(buf, 3,3);
MatrixXi mean = m.colwise().mean();
VectorXi m2 = Map<VectorXi>(mean.data(), mean.cols());
m.rowwise() -=  m2;

Это не сработает, поскольку m2 интерпретируется как вертикальное, что является причиной этого?

Кстати, я только что обнаружил, что не мог избежать создания mean матрицы, которую, я думаю, я мог бы:

// this works
MatrixXi mean = m.colwise().mean();
VectorXi m2 = Map<VectorXi>(mean.data(), mean.cols());
// this cannot pass the compilation check
VectorXi m2 = Map<VectorXi>(m.colwise().mean().data(), m.cols());

Что может быть причиной этого тогда?

1 Ответ

0 голосов
/ 05 января 2019

Ваш вопрос не очень понятен, но я думаю, вы ищете .transpose(). Также нет необходимости переназначать результат .mean():

Map<MatrixXi> m(buf, 3,3);
VectorXi mean = m.colwise().mean();
m.rowwise() -=  mean.transpose();

или напрямую используйте вектор строки:

RowVectorXi mean = m.colwise().mean();
m.rowwise() -=  mean;

или даже однострочник:

m.rowwise() -= m.colwise().mean().eval();
...