простая выборка векторов из разреженной матрицы и создание новой матрицы из выборки (python)

Этот вопрос состоит из двух частей (может быть, одно решение?):

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

6
задан ScienceFriction 24 March 2012 в 21:57
поделиться