2015-03-11 2 views
5

Как получить массив ненулевых местоположений (индексов) и значений разреженной матрицы в Armadillo C++?Возвращаемые местоположения и значения разреженной матрицы в armadillo C++

До сих пор, я могу легко построить разреженную матрицу с множеством мест (в качестве объекта UMAT) и значения (как VEC объекта):

// batch insertion of two values at (5, 6) and (9, 9) 
umat locations; 
locations << 5 << 9 << endr 
      << 6 << 9 << endr; 

vec values; 
values << 1.5 << 3.2 << endr; 

sp_mat X(locations, values, 9, 9); 

Как я могу получить обратно места? Например, я хочу, чтобы иметь возможность сделать что-то вроде этого:

umat nonzero_index = X.locations() 

Любые идеи?

+0

Ваш код имеет ошибку: вместо 'X (места, значения, 9, 9)', он должен быть 'X (места , значения, 10, 10). Поскольку C++ начинает отсчет с 0, местоположение (9,9) относится к 10-й строке и 10-му столбцу. – mtall

+0

О, хорошо поймать. Благодаря! – kchow462

ответ

14

Ассоциированный разреженная матрица Итератор .row() и .col() функции:

+0

Это именно то, что я искал. Благодаря!! – kchow462

+0

Нет ли прямого способа получить те же массивы 'locations' и' values', которые можно использовать для построения 'sp_mat'? Это единственный способ повторения элементов, как вы показали? – Szabolcs

+0

@Szabolcs - может быть, отправить патч разработчикам Armadillo? – mtall

Смежные вопросы