<p>因为浮点数(如这些向量模型中的<code>np.float32</code>类型的值)是使用不精确的二进制近似表示的,所以您正在处理或显示的数字都不是您认为的精确的十进制数</p>
<p>您看到的<code>0.53626436</code>数字并不完全是这个数字,但是一些二进制浮点数非常接近这个数字。类似地,您看到的<code>0.5362644195556641</code>数字并不完全是这个数字,而是其他一些二进制浮点数,非常接近这个数字</p>
<p>此外,这些微小的不精确性可能意味着,在理想情况下,数学表达式应该彼此给出相同的结果,而不管求值顺序如何,相反,对于不同的求值顺序,给出的结果略有不同。例如,我们知道在数学上,<code>a * (b + c)</code>总是等于<code>ab + ac</code>。然而,如果<code>a</code>,<code>b</code>,&<code>c</code>是精度有限的浮点数,执行加法然后乘法,与执行两次乘法然后一次加法的结果相比,可能会有所不同,因为中间值的近似值会略有不同</p>
<p>但是:对于使用这些数字的几乎所有领域来说,这一微小的噪音应该不会有任何区别。正确的策略是忽略它,并以极低的显著性数字编写对这种小“抖动”鲁棒的代码-尤其是当<em>打印</em>或<em>比较</em>结果时</p>
<p>因此,实际上,您应该只打印/比较这些数字的重要程度,即它们可靠地一致,比如小数点后的4位数字:</p>
<pre>
<b>0.5362</b><i>6436</i>
<b>0.5362</b><i>644195556641</i>
</pre>
<p>(事实上,您的输出已经使它看起来像是您更改了<code>numpy</code>或<code>python</code></em>中显示精度的默认级别,因为<code>most_simlar()</code>的结果在小数点后以这16位数字显示不是典型的。)</p>
<p>如果您真的,真的想,作为一种探索,精确地匹配<code>most_similar()</code>结果,您可以查看它的源代码。然后,使用完全相同的库例程,以完全相同的顺序对输入执行完全相同的步骤</p>
<p>(以下是当前<code>gensim-4.0.0beta</code>预发行版中<code>most_similar()</code>的源代码:<a href="https://github.com/RaRe-Technologies/gensim/blob/4.0.0beta/gensim/models/keyedvectors.py#L690" rel="nofollow noreferrer">https://github.com/RaRe-Technologies/gensim/blob/4.0.0beta/gensim/models/keyedvectors.py#L690</a>)</p>
<p>但是:坚持这样精确的通信通常是不明智的;考虑到浮点数学固有的不精确性,创建更脆弱的代码</p>
<p>另请参见:<a href="https://stackoverflow.com/a/65327826/130288">another answer covering some similar issues</a>,它还指出了更改默认显示精度的方法</p>