0

我有两个矩阵,一个是文本,一个是文本中的词频。我从词频矩阵中删除了一行。然后如何使用文本编号(文本矩阵中的行索引)从词频矩阵中提取一行?

例如:

第 1 步:文本列表

我有一个行中的文本列表,其中每个文本都由其行号引用:

>>print type(texts)
>>print texts.shape
<type 'numpy.ndarray'>
(53,)

第 2 步:根据行号选择文本

我有一个这样的范围:

>>print train_range
>>[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
  51 52]

此范围用于从 中选择行texts。这基本上意味着删除一个文本,因为train_range. 在下面的示例中,第一行(第 0 行)被删除,因为 0 不在train_range

texts[train_range]

第三步:获取文本的词频

然后分析文本(按词频)以返回稀疏矩阵train_X。由于每个文本都是 in 中的一行texts,因此每个文本的词频都放在 in 中的一行中train_X。所以texts有 53 行,texts[train_range]有 52 行,train_X有 52 行:

trainX = get_word_freq_matrix( texts[train_range] )
>>print train_X.shape
(52, 6237)
>>print type(train_X)
<class 'scipy.sparse.csr.csr_matrix'>

第 4 步:获取某些文本的词频

我现在想train_X使用新的范围从原始文本编号中获取行,如下所示:

apply_range = [4,7,8]
train_X[apply_range]

但是,apply_range(like train_range) 中的数字指的是 中的行texts。这些数字不指train_X. 如何使用此范围train_X根据它们出现的位置获取正确的频率texts

我尝试使用来自另一个矩阵的索引来引用矩阵中的行。但是,我不确定这是如何工作的,因为该函数没有考虑从texts.

4

1 回答 1

1

像您在问题中解释的所有其他内容一样,只需执行

apply_range = [4,7,8]
train_X[[train_range.index(i) for i in apply_range]]
于 2012-09-08T13:56:02.883 回答