本文整理汇总了C++中SparseMatrix::SetHeight方法的典型用法代码示例。如果您正苦于以下问题:C++ SparseMatrix::SetHeight方法的具体用法?C++ SparseMatrix::SetHeight怎么用?C++ SparseMatrix::SetHeight使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SparseMatrix
的用法示例。
在下文中一共展示了SparseMatrix::SetHeight方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: logic_error
//.........这里部分代码省略.........
// need one entry per original row in the row_map
if (old_to_new_rows.size() < height_)
old_to_new_rows.resize(height_);
std::fill(old_to_new_rows.begin(), old_to_new_rows.begin() + height_, UNUSED_ROW);
// no need to fill 'new_to_old_rows'
// check the column indices for validty and count nonzeros
unsigned int new_size = 0;
for (auto it=col_indices.begin(); it != col_indices.end(); ++it)
{
// index of next source column
unsigned int c = *it;
if (c >= width_)
throw std::logic_error("SparseMatrix::SubMatrixColsCompact: column index out of range");
// number of nonzeros in source column c
new_size += (col_offsets_[c+1] - col_offsets_[c]);
}
if (0u == new_size)
throw std::logic_error("SparseMatrix::SubMatrixColsCompact: submatrix is the zero matrix");
// allocate memory in the result; won't allocate if sufficient memory available
result.Reserve(height_, new_width, new_size);
unsigned int* cols_b = result.ColBuffer();
unsigned int* rows_b = result.RowBuffer();
T* data_b = result.DataBuffer();
unsigned int c_dest = 0;
unsigned int elt_count = 0;
for (auto it=col_indices.begin(); it != col_indices.end(); ++it)
{
// index of the next source column
unsigned int c = *it;
// set element offset for the next dest column
cols_b[c_dest] = elt_count;
unsigned int start = col_offsets_[c];
unsigned int end = col_offsets_[c+1];
for (unsigned int offset = start; offset != end; ++offset)
{
unsigned int row = row_indices_[offset];
old_to_new_rows[row] = row;
rows_b[elt_count] = row;
data_b[elt_count] = data_[offset];
++elt_count;
}
// have now completed another column
++c_dest;
}
cols_b[new_width] = elt_count;
assert(new_width == c_dest);
// set the size of the new matrix explicitly, since Load() has been bypassed
result.SetSize(elt_count);
// determine the new height of the submatrix
unsigned int new_height = 0;
for (unsigned int r=0; r != height_; ++r)
{
if (UNUSED_ROW != old_to_new_rows[r])
++new_height;
}
new_to_old_rows.resize(new_height);
// renumber the rows in the submatrix
unsigned int new_r = 0;
for (unsigned int r=0; r<height_; ++r)
{
if (UNUSED_ROW != old_to_new_rows[r])
{
old_to_new_rows[r] = new_r;
new_to_old_rows[new_r] = r;
++new_r;
}
}
// set the height of the new matrix explicitly
assert(new_r == new_height);
result.SetHeight(new_height);
// re-index the rows in the submatrix
for (unsigned int s=0; s != elt_count; ++s)
{
unsigned int old_row_index = rows_b[s];
rows_b[s] = old_to_new_rows[old_row_index];
}
assert(result.Height() == new_height);
assert(new_to_old_rows.size() == new_height);
assert(old_to_new_rows.size() == height_);
}