Этот вопрос состоит из двух частей (возможно, один выход?):легко выборки векторов из разреженной матрицы, а также создание новой матрицы из образца (питон)
Примеры векторов из разреженной матрицы: Есть простой способ отбора векторов из разреженной матрицы? Когда я пытаюсь пробовать строки с использованием 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, как я могу преобразовать его в разреженную матрицу без уплотнить ее, преобразовать его в список списков, а затем convet это для lil_matrix?
он действительно не работает, поскольку он возвращает список списков различной длины и не разреженных (/ не разреженных) векторов. например sm.data [sample (xrange (sm.shape [0]), 2)] возвращает массив ([[1, 2], [8]], dtype = object) – ScienceFriction
@ScienceFriction Увы, вы правы: я был тестирование на выборке, где все строки имеют записи. Я изменил ответ на что-то подобное, которое на самом деле вытаскивает вас из разреженной матрицы за один шаг. – Dougal
спасибо! работает как шарм. – ScienceFriction