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

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])

最後の各ポイントを取得し、印刷して、忘れるだけです。結局、あなたは最後の1つだけを持っています。それらすべてを保存する必要があります。

初心者レベルの 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 に答える