<blockquote>
<p>I would like to use a function similar to scipy.spatial.distance.cdist which doesn't work for 1D arrays and I don't want to add another dimension to the arrays as they become too large.</p>
</blockquote>
<p><a href="https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html" rel="nofollow noreferrer">^{<cd1>}</a>效果很好,您只需重新塑造数组的形状(n,1),而不是(n,)。您可以使用<code>A[:, None]</code>或<code>A.reshape(-1, 1)</code>向一维数组<code>A</code>添加另一个维度,而无需复制底层数据。在</p>
<p>例如</p>
<pre><code>In [56]: from scipy.spatial.distance import cdist
In [57]: A
Out[57]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [58]: B
Out[58]: array([0, 2, 4, 6, 8])
In [59]: A[:, None]
Out[59]:
array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
In [60]: cdist(A[:, None], B[:, None])
Out[60]:
array([[ 0., 2., 4., 6., 8.],
[ 1., 1., 3., 5., 7.],
[ 2., 0., 2., 4., 6.],
[ 3., 1., 1., 3., 5.],
[ 4., 2., 0., 2., 4.],
[ 5., 3., 1., 1., 3.],
[ 6., 4., 2., 0., 2.],
[ 7., 5., 3., 1., 1.],
[ 8., 6., 4., 2., 0.],
[ 9., 7., 5., 3., 1.]])
</code></pre>
<p>要计算代码中显示的<code>V</code>,可以将<code>cdist</code>与{<cd7>}一起使用,如下所示:</p>
^{pr2}$