Представляя записи в формате 3 столбца, (i, j, value), вы можете просто выбрать элементы из списка. Для того, чтобы получить это, вы можете использовать свой оригинальный метод для создания разреженной матрицы (то есть предшественник sparse()
), или использовать find
команды, а-ля [i,j,s] = find(S);
Если вам не нужны записи, и вам кажется нет, вы можете просто извлечь i
и j
.
Если по какой-либо причине ваша матрица массивна и ограничения в оперативной памяти серьезны, вы можете просто разделить матрицу на области и позволить вероятности выбора данной подматрицы пропорционально числу ненулевых элементов (с использованием nnz
) в этой подматрице. Вы можете зайти так далеко, чтобы разделить матрицу на отдельные столбцы, а остальная часть вычисления тривиальна. NB: применяя sum
к матрице, вы можете получить количество столбцов (при условии, что ваши записи равны 1 с).
Таким образом, вам не нужно даже беспокоиться об отбраковке (это кажется бессмысленным для меня в этом случае, поскольку Matlab знает, где все ненулевые записи).
Я думаю, что поиск довольно оптимизирован для разреженных матриц, если это то, о чем вы беспокоитесь. –
Я беспокоюсь о памяти не время работы. Однако даже с точки зрения времени выполнения, если вы хотите выбрать только несколько элементов, найти не так эффективно. – user1210230
Использование 'nonzeros' должно быть немного более эффективным с точки зрения памяти, чем' find', так как вы не храните указатели строк и столбцов. –