1

我需要你的帮助。我必须计算点之间的距离来定义最短对,为了实现它,我使用了 scipy.spatial.distance.pdist (我的轮廓点很复杂,z=x+1j*y)

last_points = np.array([contour.last_point_on_contour() for contour in reached])
print last_points
last_points_2d=np.array([last_points.real, last_points.imag])
dm = pdist(last_points_2d, 'euclidean')

并采取跟随错误

ValueError: A 2-dimensional array must be passed.

最后的点是(点的坐标)

[-501.54525930+9.54332241j -496.00082683+7.88953715j
 -494.40471685+2.72497522j -492.63174757-1.58916156j
 -494.39724167-6.69815202j -499.57661541-9.11793037j]

我将不胜感激。谢谢

4

2 回答 2

2

当你这样做时:

one_point_2d=np.array([last_points.real, last_points.imag])

last_points 实际上是一个点(无论是 for 循环中的最后一个点)。您希望它包含所有要点。

于 2013-07-05T11:35:35.507 回答
1

这段代码:

for contour in reached:
    last_points = contour.last_point_on_contour()
    print last_points
one_point_2d=np.array([last_points.real, last_points.imag])

只需获取最后一点,打印出来,然后忘记它。最后,你只有最后一个。您需要保存所有这些。

以下是使用新手级 Python 操作的方法:

last_points = []
for contour in reached:
    last_point = contour.last_point_on_contour()
    print last_point
    one_point_2d=[last_point.real, last_point.imag]
    last_points.append(one_point_2d)
last_points_2d = np.array(last_points)

但是,您可以使用推导式或 numpy 矢量化操作来简单得多。例如:

last_points = (contour.last_point_on_contour() for contour in reached)
last_points_2d = np.array([[point.real, point.imag] for point in last_points_complex])

或者:

last_points = np.array([contour.last_point_on_contour() for contour in reached])
last_points_2d = np.array([last_points.real, last_points.imag])

或者,如果reached是一个数组:

@np.vectorize
def last_point_on_countour(contour):
    return contour.last_point_on_contour()

last_points = last_point_on_counter(reached)
last_points_2d = np.array([last_points.real, last_points.imag])
于 2013-07-05T12:09:55.233 回答