У меня огромная матрица смежности в разреженном представлении. У меня есть 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 ответ
Если вы посмотрите документацию по sparse
, она говорит вам, что:
Примечание. Если какое-либо значение в i или j больше 2 ^ 31-1 для 32-битных платформ или 2 ^ 48-1 на 64-битных платформах, то разреженная матрица не может быть построена.
Это соответствует 2.15 e^09
для максимального наибольшего значения на 32-битной платформе и, следовательно, выдает сообщение об ошибке, поскольку ваше наибольшее значение больше этого. В качестве решения я предлагаю изменить масштаб ваших значений веса, например, с помощью log.
Похожие вопросы
Новые вопросы
matlab
MATLAB - это высокоуровневая языковая и интерактивная среда программирования для численных расчетов и визуализации, разработанная MathWorks. Не используйте оба тега [matlab] и [octave], если явно не задан вопрос о сходстве или различии между ними. При использовании этого тега, пожалуйста, укажите версию MATLAB, с которой вы работаете (например, R2017a).
spconvert
не работает с 3D-матрицей (у вас ведь матрица NxNx3?). Я немного запутался, есть ли у вас матрица Nx3 (то есть ДВА измерения) или у вас есть 3D-матрица со значениями NxNxN, не могли бы вы это прояснить? В любом случаеspconvert
нужны три строки, причем первые две строки определяют подключенные узлы, а третья задает вес подключения.