Use faster version of in-place add
parent
50ffeb7dcd
commit
15fda68c1a
|
@ -552,6 +552,18 @@ VectorValues JacobianFactor::hessianDiagonal() const {
|
|||
void JacobianFactor::hessianDiagonalAdd(VectorValues& d) const {
|
||||
for (size_t pos = 0; pos < size(); ++pos) {
|
||||
Key j = keys_[pos];
|
||||
auto item = d.find(j);
|
||||
|
||||
if(item != d.end()) {
|
||||
size_t nj = Ab_(pos).cols();
|
||||
Vector& dj = item->second;
|
||||
for (size_t k = 0; k < nj; ++k) {
|
||||
Vector column_k = Ab_(pos).col(k);
|
||||
if (model_)
|
||||
model_->whitenInPlace(column_k);
|
||||
dj(k) += dot(column_k, column_k);
|
||||
}
|
||||
} else {
|
||||
size_t nj = Ab_(pos).cols();
|
||||
Vector dj(nj);
|
||||
for (size_t k = 0; k < nj; ++k) {
|
||||
|
@ -560,10 +572,7 @@ void JacobianFactor::hessianDiagonalAdd(VectorValues& d) const {
|
|||
model_->whitenInPlace(column_k);
|
||||
dj(k) = dot(column_k, column_k);
|
||||
}
|
||||
auto item = d.find(j);
|
||||
if(item != d.end()) {
|
||||
item->second += dj;
|
||||
} else {
|
||||
|
||||
d.emplace(j, dj);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue