0

一連のインデックスを返したい python スクリプトで関数を呼び出しています。基本的に(array([index1]),array([index2]))、 numpy.where() からの戻り値を取り除きたいので、 ([index1],[index2]).

文字列に変換して使用しようとしましたarr.strip('array')が、うまくいきませんでした。

私はいくつかのことをクリアする必要があると思います。関数が値を返し、次に2つのインデックスが返されるようにしたい[val, index1, index2]

そのままでは、戻り値は次のようになります。[val, (array([index1]), array([index2]))]

基本的に、Lat と Lon の 2 つの配列を検索して、それぞれが独自の要件を満たす同じインデックスがどこにあるかを確認します。次に、それらのポイントと特定のポイントの間の距離を計算し、リストに追加します。

    for i in range(len(smalllat)):
            temp = [smalllat[i], smalllon[i]]
            loc = N.where((lat==smalllat[i]) & (lon==smalllon[i]))
            smallset.append([dist_calc.distance(temp, [lat1, lon1]), loc])

次に、最初の値 (距離) でリストを並べ替え、最初の 4 つの配列を返します。

    dset = sorted(smallset)
    return dset[:4]

これにより、次のような形式が得られます。

[[3.3883810544766138, (array([72]), array([232]))], 
 [25.248157869075957, (array([72]), array([231]))],
 [34.31977394077627, (array([71]), array([232]))], 
 [42.651294795468786, (array([71]), array([233]))]]

それらを numpy 配列に格納したいと思います(x, 4, 3)。ここで、x は関数を実行する回数です。

望ましい出力は次のようになります。

[[[3.3883810544766138, 72, 232], 
 [25.248157869075957, 72, 231],
 [34.31977394077627, 71, 232], 
 [42.651294795468786, 71, 233]],
 ...,
 [[3.3883810544766138, 72, 232], 
 [25.248157869075957, 72, 231],
 [34.31977394077627, 71, 232], 
 [42.651294795468786, 71, 233]]]

お気軽にご質問ください。

助言がありますか?


アップデート

関数を次のように変更して、必要な出力を得ました。

    for i in range(len(smalllat)):
            temp = [smalllat[i], smalllon[i]]
            loc = N.where((lat==smalllat[i]) & (lon==smalllon[i]))
            loc = [map(int, x) for x in loc]
            loc1 = loc[0]
            loc2 = loc[1]
            smallset.append([dist_calc.distance(temp, [lat1, lon1]), loc1[0], loc2[0]])

もっと良い方法があると確信しています。

4

0 に答える 0