擅长:python、mysql、java
<p>事实证明,doc单词到单词的转换(至少对我来说)比我原先想象的要复杂。<code>np.dot()</code>是其解决方案的关键,但我需要先应用一个掩码。我创建了一个更复杂的例子来测试。。。在</p>
<p>想象一个doc单词矩阵</p>
<pre><code># word1 word2 word3
# doc0 3 4 2
# doc1 6 1 0
# doc3 8 0 4
</code></pre>
<ul>
<li>在文档中,word2出现,word1出现9次</li>
<li>在文档中,如果word2出现,word2出现5次</li>
<li>在文档中,word2出现,word3出现2次</li>
</ul>
<p>所以,当我们完成后,我们应该像下面这样结束(或者它是相反的)。按列阅读时,单词矩阵变成:</p>
^{pr2}$
<p>一个直的<code>np.dot()</code>产物产生:</p>
<pre><code>import numpy as np
doc2word = np.array([[3,4,2],[6,1,0],[8,0,4]])
np.dot(doc2word,doc2word.T)
# array([[29, 22, 32],
# [22, 37, 48],
# [32, 48, 80]])
</code></pre>
<p>这意味着word1自身出现了29次。在</p>
<p>但是,如果我不把doc2word乘以它本身,而是先构建一个掩码,我就更接近了。然后我需要颠倒论点的顺序:</p>
<pre><code>import numpy as np
doc2word = np.array([[3,4,2],[6,1,0],[8,0,4]])
# a mask where all values greater than 0 are true
# so when this is multiplied by the orig matrix, True = 1 and False = 0
doc2word_mask = doc2word > 0
np.dot(doc2word.T, doc2word_mask)
# array([[17, 9, 11],
# [ 5, 5, 4],
# [ 6, 2, 6]])
</code></pre>
<p>我想这个太久了。。。。在</p>