5

簡単な質問に苦労しています。私は次の形式のnumpy配列を持っています:

[[[ 1152.07507324   430.84799194]
  [ 4107.82910156   413.95199585]
  [ 4127.64941406  2872.32006836]
  [ 1191.71643066  2906.11206055]]]

そして、バウンディングボックスを計算したいのですが、つまり、左端、最上部、右端、最下部のポイントが必要です。

これは正しい解決策であるはずです

[[[ 1152.07507324   413.95199585]
  [ 4127.64941406   413.95199585]
  [ 4127.64941406  2906.11206055]
  [ 1152.07507324  2906.11206055]]]

私はそのトリックを実行する厄介な関数を開発しましたが、実際にはpythonic / numpyicではないため、非常に満足していません。

def bounding_box(iterable):
    minimum_x = min(iterable[0], key=lambda x:x[0])[0]
    maximum_x = max(iterable[0], key=lambda x:x[0])[0]
    minimum_y = min(iterable[0], key=lambda x:x[1])[1]
    maximum_y = max(iterable[0], key=lambda x:x[1])[1]

    return numpy.array([[(minimum_x, minimum_y), (maximum_x, minimum_y), (maximum_x, maximum_y), (minimum_x, maximum_y)]], dtype=numpy.float32)

おそらくnumpyビルトインを使用して、上記の関数を最適化する方法を知っていますか?

4

2 に答える 2

10

numpy.minnumpy.max組み込みを使用します。

def bounding_box(iterable):
    min_x, min_y = numpy.min(iterable[0], axis=0)
    max_x, max_y = numpy.max(iterable[0], axis=0)
    return numpy.array([(min_x, min_y), (max_x, min_y), (max_x, max_y), (min_x, max_y)])
于 2012-09-16T01:22:09.670 に答える