我有两个矩阵,一个是文本,另一个是文本中的单词频率。我从字频矩阵中删除了一行。然后我如何使用文本编号(文本矩阵中的行索引)从单词频率矩阵中提取一行?
例如:
第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_X
中texts
的显示位置从texts
获取正确的频率?
我试过referencing rows in a matrix using index from another matrix。但是,我不确定这是如何工作的,因为该功能没有考虑从{{1}}删除了哪些文本。
答案 0 :(得分:1)
如果您在问题中解释了其他所有内容,请执行
apply_range = [4,7,8]
train_X[[train_range.index(i) for i in apply_range]]