Я заполняю разреженную матрицу Р (230К, 290K) со значениями, поступающих из текстового файла, который я прочитал построчно, здесь (упрощенный) кодразреженных матриц Назначение становится очень медленным в Matlab
while ...
C = textscan(text_line,'%d','delimiter',',','EmptyValue', 0);
line_number = line_number+1;
P(line_number,:)=C{1};
end
проблема у меня в том, что в то время как в начале заявление
P(line_number,:)=C{1};
быстро, после нескольких тысяч строк становятся exterely медленно, я думаю, потому что Matlab нужно найти место в памяти, чтобы выделить каждый раз. Есть ли способ предварительно выделить память с разреженными матрицами? Я так не думаю, но, может быть, я чего-то не хватает. Любые другие рекомендации, которые могут ускорить работу (например, иметь много свободного ОЗУ, могут иметь значение?)
На сегодняшний день самым быстрым способом создания разреженной матрицы является загрузка всех значений за один раз, а затем генерация разреженной матрицы в один вызов «разреженной». Однако может быть лучший способ сделать то, что вам нужно. Как вы будете работать с матрицей 'P', как только вы прочтете данные? –
Вы имеете в виду присвоение значения нормальной матрице, а затем преобразование ее в разреженный? Я не претендую, это возможно, матрица очень большая. Я на самом деле использую код, предложенный здесь http://stackoverflow.com/questions/24789600/handling-a-very-big-and-sparse-matrix-in-matlab, чтобы заполнить матрицу, оказалось, что это хорошо, но, как сказал, через некоторое время становится очень медленным. – Eugenio
Нет, я имею в виду чтение всех значений в виде вектора, создание векторов их адресатов столбцов и строк, а затем вызов 'разреженных' для создания разреженной матрицы для вас за один раз (см. Документацию для' разреженных'). –