Этот вопрос состоит из двух частей (может быть, одного решения?):
Выборка векторов из разреженной матрицы : Существует ли простой способ выборки векторов из разреженной матрицы?Когда я пытаюсь сэмплировать строки, используя 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?