计算两个复数之间的欧几里得距离scipy.spatial.distance.euclidean
works:
import numpy
import scipy.spatial.distance
z1 = numpy.complex(numpy.cos(0), numpy.sin(0))
z2 = numpy.complex(numpy.cos(3*numpy.pi/2), numpy.sin(3*numpy.pi/2))
print scipy.spatial.distance.euclidean(z1, z2)
gives:
1.4142135623730951
但是,成对距离矩阵或两个输入数组的每对之间的距离不起作用:
A = numpy.random.uniform(size=(5,1)) + numpy.random.uniform(size=(5,1))*1j
print scipy.spatial.distance.pdist(A)
返回警告和实部之间的距离:
lib/python2.7/site-packages/scipy/spatial/distance.py:107: ComplexWarning: Casting complex values to real discards the imaginary part
X = X.astype(np.double)
array([ 0.78016544, 0.66201108, 0.8330932 , 0.54355982, 0.11815436,
0.05292776, 0.23660562, 0.17108212, 0.11845125, 0.28953338])
与scipy.spatial.distance.cdist(A,A)
.
是否可以使用 cdist 或 pdist 计算成对距离矩阵或两个输入数组的每对之间的距离,而不使用 for 循环和scipy.spatial.distance.euclidean
这对于我的问题来说太慢了?