1

私の質問は簡単です。からgeopy.distance、2 点間の距離を計算できます。しかし、さらに計算するためにデータ形式を変換することはできません。

次のようなコード:

from geopy.distance import vincenty
length = vincenty((38.103414282108375, 114.51898800000002),\
                  (38.07902986076924, 114.50882128404997))

ration = np.array(([2,2],[3,3]))*length 

エラー:

* のサポートされていないオペランド型: 'int' および 'vincenty'

Distance(xxx)をnp.array:に変更しようとしましnp.array(length)たが、失敗しました。のように表示されますがarray(Distance(388.659276576), dtype=object)、直接計算をサポートすることはまだできません。

4

2 に答える 2

2

マニュアルで提案されているように、距離/ビンセンティを何らかの形式で「エクスポート」する必要があります。たとえば、次のようにします。

> from geopy.distance import vincenty
> newport_ri = (41.49008, -71.312796)
> cleveland_oh = (41.499498, -81.695391)
> print(vincenty(newport_ri, cleveland_oh).miles)
538.3904451566326

vincenty(すでに述べたように)数学オペランドをサポートしていないgeopy外のオブジェクトであるため、iteselfを処理することはできません。を使用して、データ オブジェクト内の値を抽出する必要があります.miles。その他の可能な値については、完全なドキュメントを参照してください: GeoPy ドキュメント

タイプの違いを参照してください。

> type(vincenty(newport_ri, cleveland_oh))
geopy.distance.vincenty

> type(vincenty(newport_ri, cleveland_oh).miles)
float

これで次のように計算できます。

> vincenty(newport_ri, cleveland_oh).miles
538.3904451566326

> vincenty(newport_ri, cleveland_oh).miles * 2
1076.7808903132652

または、これからnumpy配列が本当に必要な場合:

> np.array(vincenty(newport_ri, cleveland_oh).miles)
array(538.3904451566326)

> type(np.array(vincenty(newport_ri, cleveland_oh).miles))
numpy.ndarray

編集dtype: NumPy の組み込みパラメーターを使用して、そのデータ型を強制することもできることに注意してください。

> np.array(vincenty(newport_ri, cleveland_oh).miles, dtype=np.float32)
array(538.3904418945312, dtype=float32)

> np.array(vincenty(newport_ri, cleveland_oh).miles, dtype=np.float64)
array(538.3904451566326)  # dtype=float64, default type here

> np.array(vincenty(newport_ri, cleveland_oh).miles, dtype=np.int32)
array(538, dtype=int32)

これ、大量のデータを保存/ロードしているが、常に特定の精度が必要な場合に役立ちます。

于 2016-03-28T09:04:32.470 に答える