Этот вопрос состоит из двух частей (может быть, одно решение?):
Выборка векторов из разреженной матрицы: Существует ли простой способ выборки векторов? из разреженной матрицы? Когда я пытаюсь отобрать строки с помощью random.sample, я получаю TypeError: длина разреженной матрицы неоднозначна.
from random import sample
import numpy as np
from scipy.sparse import lil_matrix
K = 2
m = [[1,2],[0,4],[5,0],[0,8]]
sample(m,K) #works OK
mm = np.array(m)
sample(m,K) #works OK
sm = lil_matrix(m)
sample(sm,K) #throws exception TypeError: sparse matrix length is ambiguous.
Мое текущее решение состоит в том, чтобы сделать выборку из числа строк в матрице, а затем использовать getrow(), что-то вроде:
indxSampls = sample(range(sm.shape[0]), k)
sampledRows = []
for i in indxSampls:
sampledRows+=[sm.getrow(i)]
Любые другие эффективные/элегантные идеи? размер плотной матрицы 1000x30000 и может быть больше.
Построение разреженной матрицы из списка разреженных векторов: Теперь представьте, что у меня есть список выборочных векторов sampledRows, как я могу преобразовать его в разреженную матрицу без уплотнения, преобразовать его в список списков, а затем преобразовать это в lil_matrix?