Один из лучших способов построить скудную разреженную матрицу - это метод coo_matrix ie.Постройте большую скудную разреженную матрицу
coo_matrix((data, (i, j)), [shape=(M, N)])
where:
data[:] are the entries of the matrix, in any order
i[:] are the row indices of the matrix entries
j[:] are the column indices of the matrix entries
Но, если матрица очень велика это не практично, чтобы загрузить весь I, J и данных векторов в память.
Как вы создаете coo_matrix, так что (data, (i, j)) подается (с итератором или генератором) с диска, а объекты массива/вектора на диске либо находятся в форматах .npy или pickle?
Pickle - лучший вариант, поскольку numpy.save/load не оптимизирован для scipy разреженных. Возможно, есть еще более быстрый формат.
Оба типа numpy.genfromtext() и numpy.loadtxt() являются громоздкими, медленными и запоминающимися.
Используя ваш пример для создания coo_matrix, память содержит данные объектов, строки, столбцы и M. Вопрос в том, может ли coo_matrix создавать инкрементно с потоковыми строками, столбцами и данными. Ваш ответ подсказывает, что это невозможно. –
Код '__init__' для' coo_matrix' написан на Python и прост в использовании. Код для 'bmat', который строит матрицу' coo' из блоков, также будет поучительным. – hpaulj