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