Память, необходимая для хранения большой матрицы, может легко выйти из-под контроля, поэтому nx.adjacency_matrix(G)
возвращает «разреженную матрицу», которая хранится более эффективно (при использовании такого количества записей будет 0).
Поскольку у вашего графа 131000 вершин, вся матрица смежности будет использовать около 131000^2 * 24 bytes
(целое число занимает 24 байта памяти в python), что составляет около 400 ГБ. Тем не менее, ваш график имеет менее 0,01% всех ребер, иными словами, он очень разреженный и разреженные матрицы будут работать для вас.
Чтобы получить разреженную матрицу, просто используйте A = nx.adjacency_matrix(G)
, не вызывая A.todense()
после нее (это попытается сохранить ее снова нормально).
Существует встроенная функция scipy.sparse
для эффективного сохранения и загрузки разреженных матриц, см. здесь . Например, чтобы сохранить разреженную матрицу A, используйте
scipy.sparse.save_npz('filename.npz', A)
Если для вас важно использовать txt или CSV, вам придется сделать это вручную. Это можно сделать, перебирая каждую строку вашей матрицы и записывая их по одному в ваш файл:
for i in range(A.shape[0]):
row = A.getrow(i).todense()
[write row to file using your preferred method]
Это может занять несколько минут, но должно работать (я тестировал путь такого же размера).