Кресты / Говнокод #29176 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
SparseMatrix<double> mat(rows,cols);
for (int k=0; k<mat.outerSize(); ++k)
  for (SparseMatrix<double>::InnerIterator it(mat,k); it; ++it)
  {
    it.value();
    it.row();   // row index
    it.col();   // col index (here it is equal to k)
    it.index(); // inner index, here it is equal to it.row()
  }

Random access to the elements of a sparse object can be done through the coeffRef(i,j) function. However, this function involves a quite expensive binary search. In most cases, one only wants to iterate over the non-zeros elements. This is achieved by a standard loop over the outer dimension, and then by iterating over the non-zeros of the current inner vector via an InnerIterator. Thus, the non-zero entries have to be visited in the same order than the storage order.

Запостил: CHayT CHayT, (Updated )

Комментарии (4) RSS

  • Не говнокод, а говнодоки, которые забыли уточнить, что код из их примера иногда итерирует и по нулевым элементам тоже. Поскольку у меня в неко-й матрице лежали одни единички, я типа: а не буду проверять значения. Конец немного предсказуем.
    Ответить
    • Типа он гарантирует итерацию по всем ненулевым, но может случайно захватить и нули тоже?
      Ответить
  • > it(mat, k)
    Хахаха, ит мат ка

    А почему итерирует? Потому что в элемент пописали?
    Ответить
  • // col index (here it is equal to k)

    Т. е. матрица представлена полным массивом колонок, а каждая колонка — списком ненулевых элементов?

    А что будет, если какая-то колонка полностью состоит из нулей? Внутренний список будет пустым или будет рандомно наполнен некоторыми нулевыми элементами?
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8