擅长:python、mysql、java
<p>标准化步骤是将成对距离除以最大值,这似乎不是标准步骤,可能会使您很难找到一个现成的函数来执行您所要执行的操作。虽然你自己做很容易。一个起点是将<code>list_of_objects</code>转换为数组:</p>
<pre><code>>>> obj_arr = np.array(list_of_objects)
>>> obj_arr.shape
(3L, 4L)
</code></pre>
<p>然后可以使用广播获得成对距离。这有点低效,因为它没有利用度量的symetry,并且每两次计算一个距离:</p>
<pre><code>>>> dists = np.abs(obj_arr - obj_arr[:, None])
>>> dists.shape
(3L, 3L, 4L)
</code></pre>
<p>标准化非常容易:</p>
<pre><code>>>> dists /= dists.max(axis=(0, 1))
</code></pre>
<p>你的最终称重可以通过多种方式进行,你可能需要最快的基准:</p>
<pre><code>>>> dists.dot([1, 1, 1, 1])
array([[ 0. , 1.93813131, 2.21542674],
[ 1.93813131, 0. , 3.84644195],
[ 2.21542674, 3.84644195, 0. ]])
>>> np.einsum('ijk,k->ij', dists, [1, 1, 1, 1])
array([[ 0. , 1.93813131, 2.21542674],
[ 1.93813131, 0. , 3.84644195],
[ 2.21542674, 3.84644195, 0. ]])
</code></pre>