2012-09-07 71 views
0

我有兩個矩陣,文本之一併且在文本字頻率中的一個從矩陣2提取行。我從字頻矩陣中刪除一行。那我怎樣才能從文字頻率矩陣中提取一行,使用文本編號(文本矩陣中的行索引)?使用索引從矩陣1

例如:

步驟1:

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

:文本

我有行文本,其中,每個文本是由它的行號碼稱爲列表的列表第2步:根據自己的行數

選擇文本和我有AR這樣的天使:

>>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正確的頻率?

我已經試過referencing rows in a matrix using index from another matrix。但是,我不知道如何可以工作,因爲功能沒有考慮到其中的文本從texts刪除的帳戶。

+0

你可能不得不某處節省一些有關哪些行被刪除,然後獲取用於'train_X'正確的索引使用一個函數。像'train_X [get_correct_indexes([4,7,8],who_got_deleted)]''。 至少這不應該太難實現,也許有更好的方法來做到這一點。 – Bakuriu

+0

從粗略的角度來看,您似乎將不同類型的數據關聯在一起。而不是將它們存儲在單獨的並行列表中(其中關聯基於列表中的位置),也許字典數據類型的鍵/值對可能更好地滿足您的需求? – abought

回答

1

隨着一切就像你在問題中所解釋的,只是做

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