Как я могу сделать разреженную матрицу, используя массивы ячеек в MATLAB? - PullRequest
0 голосов
/ 05 июня 2019

Разреженная матрица - это большая матрица, в которой почти все элементы имеют одинаковое значение (обычно ноль). Нормальное представление разреженной матрицы занимает много памяти, когда полезная информация может быть захвачена с гораздо меньшим количеством. Возможный способ представления разреженной матрицы - вектор ячейки, первый элемент которого представляет собой двухэлементный вектор, представляющий размер разреженной матрицы. Второй элемент - это скаляр, определяющий значение по умолчанию разреженной матрицы. Каждый последующий элемент вектора ячейки представляет собой трехэлементный вектор, представляющий один элемент разреженной матрицы, значение которого отличается от значения по умолчанию. Три элемента - это индекс строки, индекс столбца и фактическое значение. Напишите функцию с именем sparse2matrix, которая принимает один вход вектора ячейки, как определено выше, и возвращает выходной аргумент, называемый матрицей, матрица в ее традиционной форме.

cellvec = {[2 3], 0, [1 2 3], [2 2 -3]};
matrix = sparse2matrix(cellvec)
matrix =
     0     3     0
     0    -3     0

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Векторизованная форма Ответ Абдулрхана Абоганимы :

function a = sparse2matrix(cellvec)
a = zeros(cellvec{1}) + cellvec{2};
v = cat(1, cellvec{3:end});
a(sub2ind(cellvec{1}, v(:,1), v(:,2))) = v(:,3);
0 голосов
/ 05 июня 2019

По информации в вопросе:

В массивах векторных ячеек обычно это первый вектор, используемый как разреженный матрица размерность

Второй элемент - это скаляр, задающий значение по умолчанию разреженной матрицы

Другие векторы используются для указания местоположенияи значение элемента в разреженной матрице , то есть [i, j, x], где i, j - это местоположение в матрице, а x - это значение элемента.

Так что программа просто:

function matrix=sparse2matrix(cellvec);

matrix=zeros(cellvec{1})+cellvec{2};

for i=3:length(cellvec)

      matrix(cellvec{i}(1,1),cellvec{i}(1,2))=cellvec{i}(3);

end

С наилучшими пожеланиями Абдулрхман Абоганима

...