Мне нужно знать, есть ли какой-нибудь эффективный способ сделать следующее в MATLAB.
У меня есть несколько больших разреженных матриц, размер каждой из которых примерно 9000000x9000000.
Мне нужнополучить доступ к нескольким элементам такой матрицы и назначить каждому выбранному элементу другое значение, хранящееся в другом массиве.Я приведу пример:
Что у меня есть:
- SPARSE MATRIX размером 9000000x9000000
Матрица со списком индексов и значений, которые я хочучтобы получить доступ, это такая матрица:
[row1, col1, value1;
row2, col2, value2;
...
rowN, colN, valueN]
Где N
- длина такой матрицы.
Что мне нужно:
Присвойте SPARSE MATRIX соответствующее значение для соответствующего индекса, это:
SPARSE_MATRIX(row1, col1) = value1
SPARSE_MATRIX(row2, col2) = value2
...
SPARSE_MATRIX(rowN, colN) = valueN
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Спасибообоим за ответы, я думаю, что я не объяснил себя хорошо, я попробую еще раз.
У меня уже есть большая МАТРИЦА SPARSE, около 9000000 строк x 9000000 столбцов, это SPARSE MATRIX, заполненная нулями.
Тогда у меня есть другой массив или матрица, назовем его M
с N
числом строк, где N
может принимать значения от 0 до 9000000;и 3 колонки.Первые два столбца используются для индексации элемента моей SPARSE MATRIX, а в третьем столбце хранится значение, которое я хочу передать в SPARSE MATRIX, то есть с учетом случайной строки M
, i
:
SPARSE_MATRIX(M(i, 1), M(i, 2)) = M(i, 3)
Идея состоит в том, чтобы сделать это для всех строк, я попробовал это с общей индексацией:
SPARSE_MATRIX(M(:, 1), M(:, 2)) = M(:, 3)
Теперь я хотел бысделать это назначение для всех строк в M
как можно быстрее, потому что, если я использую циклическое или общее индексирование, это занимает много времени (я использую процессор 7-го поколения i7 с 16 ГБ ОЗУ).И мне также нужно сохранить нули в SPARSE_MATRIX.
- РЕДАКТИРОВАТЬ 2: РЕШЕНО!Спасибо, Метахоминид, я не обдумывал, но да, разреженная функция действительно решает мою проблему, я просто думаю, что мои мозговые цепи были замкнуты вчера и не могли видеть сквозь это, хахаха.В любом случае, спасибо вам обоим!
С уважением!