2

次のエラーメッセージが表示されます

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\IPython\core\interactiveshell.py", line 2721, in run_code
    exec code_obj in self.user_global_ns, self.user_ns
  File "<ipython-input-257-84ae6ec7b6f6>", line 1, in <module>
    accuracy.ra_os
  File "<ipython-input-255-a91d95432efe>", line 32, in ra_os
    return np.average([(ref.intersection(s).area/s.area) for s in seg])
TypeError: 'Polygon' object is not iterable

ここで、Polygon はPolygon classshapely のです

私は自分のクラス Accuracy を持っています: 参照 (1 つ) ポリゴンとセグメント化された (1 つ以上の) ポリゴンの間の統計値

ref = <shapely.geometry.polygon.Polygon at 0x4997b38>
seg = [<shapely.geometry.polygon.Polygon at 0x4b972e8>, <shapely.geometry.polygon.Polygon at 0x49c7390>]



import math
import numpy as np
from shapely.geometry import Polygon
nan = np.nan



class Accuracy(object):
    def __init__(self, ref, seg=None):
        self.ref = ref
        self.seg = seg

    @property
    def area(self):
        return self.ref.area

    @property
    def perimeter(self):
        return self.ref.length

    @property
    def centroidX(self):
        return self.ref.centroid.x

    @property
    def centroidY(self):
        return self.ref.centroid.y

    @property
    def segments(self):
        if self.seg:
            return len(self.seg)
        else:
            return 0

    @property
    def ra_or(self):
        if self.seg:
            return np.average([(ref.intersection(s).area/ref.area) for s in seg])
        else:
            return nan

    @property
    def ra_os(self):
        if self.seg:
            return np.average([(ref.intersection(s).area/s.area) for s in seg])
        else:
            return nan

精度 = 精度 (参照、seg_overlap) 精度.ra_os

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\IPython\core\interactiveshell.py", line 2721, in run_code
    exec code_obj in self.user_global_ns, self.user_ns
  File "<ipython-input-45-84ae6ec7b6f6>", line 1, in <module>
    accuracy.ra_os
  File "<ipython-input-7-1e04291926b0>", line 35, in ra_os
    return np.average([(ref.intersection(s).area/s.area) for s in seg])
TypeError: 'Polygon' object is not iterable

クラス外で関数を実行すると、このエラーは発生しません

np.average([(ref.intersection(s).area/ref.area) for s in seg_overlap])
Out[47]: 0.48709794373000681
4

1 に答える 1

3

self.segただの代わりに言うつもりでしたseg:

return np.average([(ref.intersection(s).area/ref.area) for s in self.seg])
                                                                ^^^^^

(両方の関数で)

誤って同じ名前のグローバル オブジェクトを参照していると思います。

于 2013-03-15T15:27:29.943 に答える