Образцы прогонов -

я есть две интересующие матрицы, первая - это матрица «слов», с двумя столбцами: идентификатор документа и термин «идентификатор». Например:

bow[0:10]

Out[1]:
    array([[ 0, 10],
           [ 0, 12],
           [ 0, 19],
           [ 0, 20],
           [ 1,  9],
           [ 1, 24],
           [ 2, 33],
           [ 2, 34],
           [ 2, 35],
           [ 3, 2]])

Кроме того, у меня есть «индексная» матрица, где каждая строка в матрице содержит индекс первой и последней строки для данного идентификатора документа в пакете с матрицей слов. Пример: строка 0 является первым и последним индексом для идентификатора документа 0. Например:

index[0:4]

Out[2]:
    array([[ 0,  4],
           [ 4,  6],
           [ 6,  9],
           [ 9, 10]])

То, что я хотел бы сделать, это взять случайный образец идентификаторов документов и получить всю сумку строк слов для этих идентификаторов документов. Матрица пакета слов составляет примерно 150M строк (~ 1,5 ГБ), поэтому использование numpy.in1d ​​() слишком медленное. Нам нужно быстро вернуть их для подачи в последующую задачу.

Наивное решение, которое я нашел, заключается в следующем:

def get_rows(ids):
    indices = np.concatenate([np.arange(x1, x2) for x1,x2 in index[ids]])
    return bow[indices]

get_rows([4,10,3,5])

Общий образец

Типичным примером для постановки проблемы будет что-то вроде этого -

indices = np.array([[ 4, 7],
                    [10,16],
                    [11,18]]

Ожидаемый результат будет -

array([ 4,  5,  6, 10, 11, 12, 13, 14, 15, 11, 12, 13, 14, 15, 16, 17])

Ответы на вопрос(1)

Ваш ответ на вопрос