Недавно я изо всех сил пытался работать с разреженными матрицами и складывать их в одну матрицу. Я использовал для создания нескольких объектов csr_matrix
vec_list = sp.sparse.csr_matrix(my_vec_i) # every vector of shape (1,200)
И после того, как vec_list
состоял примерно из 100 разреженных матриц, я использовал функцию scipy (НЕ numpy s) sp.vstack, чтобы объединить все 100 записей в csr matrix of shape (100, 200).
Теперь в моих текущих настройках (python 3.8 ) я вижу предупреждение о том, что sp.vstack будет устаревшим, но в любом случае, неважно, использовал ли я numpy или scipy vstack, у меня появился массив формы (100,1) , где мои 200 столбцов рассматриваются как 1 запись csr_matrix в первом и единственном столбце .
В моих старых фрагментах кода я мог видеть, что sp.vstack(vec_list)
создал разреженную матрицу crs формы (100,200) .. Я что-то пропустил, есть ли у кого-нибудь мысли по этому поводу? Я немного отчаялся создать свою сложенную разреженную матрицу .. спасибо всем
Edit: Как вы можете видеть ниже в моем комментарии, np.vstack и sp.vstack не обязательно делают то же самое (в моем ответ np.vstack я дважды грустил, но один раз имел ввиду sp.vstack). Я использовал точное решение (скопированное), и в какой-то момент оно вернуло ошибку, так как не было складывания. Чтобы использовать sp.stacking, я сложил массивы, отличные от csr_matrix, а затем преобразовал их в csr_matrix. Это нецелесообразно при использовании огромных наборов массивов, но, по крайней мере, я мог без проблем запустить файл. Чтобы ответить на приведенный ниже ответ от Tinu, я не смог решить его таким образом, поскольку результат выглядит следующим образом - при выполнении кода примера:
>>> np.vstack(vec_list).shape
(100, 1)
>>> sp.vstack(vec_list).shape
(100, 200)
Python 3.8.2 , Scipy 1.4.1