Недавно я изо всех сил пытался работать с разреженными матрицами и складывать их в одну матрицу. Я использовал для создания нескольких объектов csr_matrix
vec_list = sp.sparse.csr_matrix(my_vec_i) # every vector of shape (1,200)
И после того, как vec_list
состояло примерно из 100 разреженных матриц, я использовал функцию sp.vstack scipy (НЕ numpy), чтобы объединить все 100 записей в матрицу csr формы (100, 200).
Теперь в моих текущих настройках (python 3.8) я вижу предупреждение о том, что sp.vstack будет объявлен устаревшим, но в любом случае, независимо от того, использовал ли я функциональность vstack numpy или scipy, в итоге у меня появился < strong>массив формы (100,1), где мои 200 столбцов рассматриваются как 1 запись csr_matrix в первом и единственном столбце.
В моих старых фрагментах кода я мог видеть, что sp.vstack(vec_list)
создал разреженную матрицу crs формы (100 200). Я что-то пропустил, есть ли у кого-нибудь мысли по этому поводу? Я немного отчаялся создать свою сложенную разреженную матрицу .. всем спасибо
Редактировать: как вы можете видеть ниже в моем комментарии, np.vstack и sp.vstack не обязательно делают одно и то же (в своем ответе я дважды огорчил np.vstack, но я имел в виду sp.vstack один раз). Я использовал точное решение (скопированное), и в какой-то момент оно вернуло ошибку, так как стекирование не происходило. Чтобы использовать sp.stacking, я сложил массивы, отличные от csr_matrix, а затем преобразовал их в csr_matrix. Это неосуществимо при использовании огромных наборов массивов, но, по крайней мере, я мог без проблем просмотреть файл. Чтобы ответить на приведенный ниже ответ от Тину, я не смог решить его таким образом, так как результат выглядит следующим образом - при выполнении кода примера:
>>> np.vstack(vec_list).shape
(100, 1)
>>> sp.vstack(vec_list).shape
(100, 200)
Питон 3.8.2, Сципи 1.4.1
sp
. Я предполагаю, что вы сделалиimport scipy as sp
. Если это так, тоsp.vstack
— это точно такая же функция, какnumpy.vstack
. Путаница, вызванная этим дублированием, является одной из причин того, что включение пустых имен в пространство именscipy
устарело. Для разреженных матриц вам нужноscipy.sparse.vstack
, как в ответе @Tinu. - person Warren Weckesser   schedule 08.05.2020