У меня огромная матрица смежности в разреженном представлении. У меня есть 70 000 и 300 000 ребер, а структура файла смежности представляет собой матрицу Nx3, в которой первые два столбца представляют собой соединенные узлы, а третий столбец - вес. Пытаюсь читать из матлаба. Во-первых, я импортирую файл, а во-вторых, я пытаюсь создать разреженную матрицу с помощью spconvert:

adj1 = spconvert(gr);

Однако я получаю следующее сообщение об ошибке:

??? Error using ==> sparse
Index into matrix is too large.
Error in ==> spconvert at 53
   S = sparse(D(:,1),D(:,2),D(:,3));

Наибольшее значение матрицы составляет 2,537020525000000e + 09 и соответствует узлу. Есть идеи, что здесь не так?

1
Jose Ramon 19 Авг 2014 в 11:54
spconvert не работает с 3D-матрицей (у вас ведь матрица NxNx3?). Я немного запутался, есть ли у вас матрица Nx3 (то есть ДВА измерения) или у вас есть 3D-матрица со значениями NxNxN, не могли бы вы это прояснить? В любом случае spconvert нужны три строки, причем первые две строки определяют подключенные узлы, а третья задает вес подключения.
 – 
Fraukje
19 Авг 2014 в 12:17
Вы правы, я редактирую свой вопрос, а не размерность, я имею в виду столбцы. У меня матрица nx3. Первые два столбца обозначают подключенные узлы, а третий - вес подключения.
 – 
Jose Ramon
19 Авг 2014 в 12:20

1 ответ

Лучший ответ

Если вы посмотрите документацию по sparse, она говорит вам, что:

Примечание. Если какое-либо значение в i или j больше 2 ^ 31-1 для 32-битных платформ или 2 ^ 48-1 на 64-битных платформах, то разреженная матрица не может быть построена.

Это соответствует 2.15 e^09 для максимального наибольшего значения на 32-битной платформе и, следовательно, выдает сообщение об ошибке, поскольку ваше наибольшее значение больше этого. В качестве решения я предлагаю изменить масштаб ваших значений веса, например, с помощью log.

3
Fraukje 19 Авг 2014 в 12:25
В основном я преобразовываю индексы узлов из 1-65098, чтобы не было проблем. Спасибо за время, фраукье.
 – 
Jose Ramon
19 Авг 2014 в 12:29
Нет проблем, рад, что смог помочь. Удачи!
 – 
Fraukje
19 Авг 2014 в 12:31