101 double** covBlocks,
const std::vector<int>& blockIndices) {
104 vector<MatrixElem> elemsToCompute;
105 for (
size_t i = 0; i < blockIndices.size(); ++i) {
106 int nbase = blockIndices[i];
107 int vdim = nbase - base;
108 for (
int rr = 0; rr < vdim; ++rr)
109 for (
int cc = rr; cc < vdim; ++cc) {
121 sort(elemsToCompute.begin(), elemsToCompute.end());
124 for (
size_t i = 0; i < elemsToCompute.size(); ++i) {
132 for (
size_t i = 0; i < blockIndices.size(); ++i) {
133 int nbase = blockIndices[i];
134 int vdim = nbase - base;
135 double* cov = covBlocks[i];
136 for (
int rr = 0; rr < vdim; ++rr)
137 for (
int cc = rr; cc < vdim; ++cc) {
143 LookupMap::const_iterator foundIt =
_map.find(idx);
144 assert(foundIt !=
_map.end());
145 cov[rr * vdim + cc] = foundIt->second;
146 if (rr != cc) cov[cc * vdim + rr] = foundIt->second;
154 const std::vector<std::pair<int, int> >& blockIndices) {
157 rowBlockIndices.size(),
158 rowBlockIndices.size(),
true);
160 vector<MatrixElem> elemsToCompute;
161 for (
size_t i = 0; i < blockIndices.size(); ++i) {
162 int blockRow = blockIndices[i].first;
163 int blockCol = blockIndices[i].second;
164 assert(blockRow >= 0);
165 assert(blockRow < (
int)rowBlockIndices.size());
166 assert(blockCol >= 0);
167 assert(blockCol < (
int)rowBlockIndices.size());
174 for (
int iRow = 0; iRow < block->rows(); ++iRow)
175 for (
int iCol = 0; iCol < block->cols(); ++iCol) {
176 int rr = rowBase + iRow;
177 int cc = colBase + iCol;
180 if (r > c) swap(r, c);
186 sort(elemsToCompute.begin(), elemsToCompute.end());
189 for (
size_t i = 0; i < elemsToCompute.size(); ++i) {
195 for (
size_t i = 0; i < blockIndices.size(); ++i) {
196 int blockRow = blockIndices[i].first;
197 int blockCol = blockIndices[i].second;
203 for (
int iRow = 0; iRow < block->rows(); ++iRow)
204 for (
int iCol = 0; iCol < block->cols(); ++iCol) {
205 int rr = rowBase + iRow;
206 int cc = colBase + iCol;
209 if (r > c) swap(r, c);
211 LookupMap::const_iterator foundIt =
_map.find(idx);
212 assert(foundIt !=
_map.end());
213 (*block)(iRow, iCol) = foundIt->second;