使用矩阵1中的索引从矩阵2中提取行

时间:2012-09-07 17:48:00

标签: python arrays matrix numpy sparse-matrix

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

例如:

第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中只有52个行索引。在下面的示例中,第一行(第0行)被删除,因为0不在train_range中:

texts[train_range]

第3步:获取文字的字频

然后分析文本(通过词频)以返回稀疏矩阵train_X。由于每个文字都是texts中的一行,因此每个文字的单词频率都放在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(例如train_range)中的数字是指texts中的行。这些数字不是指train_X中的行。如何使用此范围根据train_Xtexts的显示位置从texts获取正确的频率?

我试过referencing rows in a matrix using index from another matrix。但是,我不确定这是如何工作的,因为该功能没有考虑从{{1}}删除了哪些文本。

1 个答案:

答案 0 :(得分:1)

如果您在问题中解释了其他所有内容,请执行

apply_range = [4,7,8]
train_X[[train_range.index(i) for i in apply_range]]