0

t-x-y時間-緯度-経度を表す配列と、グリッドの値が任意 の測定変数を保持する場所の場合、特定の時間条件で配列のスライスをt-x-y「グループ化」するにはどうすればよいですか?x-y

たとえば、コンパニオン配列が日時の1次元リストである場合、月が1に等しいグリッドtの要素ごとの平均を見つけるにはどうすればよいですか。月= 1の要素が10個しかない場合、配列が必要です。ここから、グリッド全体で目的の平均値を取得するためにできることがわかります。ここで、配列操作の結果です。 x-yt(10, len(x), len(y))np.mean(out, axis=0)x-yout

の形状t-x-yはおおよそ(2000, 50, 50)です。これは、さまざまな時間(50, 50)の値のグリッドです2000t一意の条件 (月または年でスライスしているかどうか) の数が、配列内の要素の総数よりも << であると仮定します。

これを達成するための最もpythonicな方法は何ですか? この操作は多くのデータセットで繰り返されるため、計算効率の高いソリューションが優先されます。私はPythonに比較的慣れていないので(テスト用のサンプル配列を作成する方法さえわかりません)、役立つ可能性のある他のモジュールを自由に推奨してください。 (Pandasも見てきたけど、主に1次元の時系列データを扱っているような…?)

編集:

これは、配列の例として私ができる最善の方法です:

>>> t = np.repeat([1,2,3,4,5,6,7,8,9,10,11,12],83)
>>> t.shape
(996,)
>>> a = np.random.randint(1,101,2490000).reshape(996, 50, 50)
>>> a.shape
(996, 50, 50)
>>> list(set(t))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

つまり、a はランダム データの配列であり、t は (たとえば) 月を表す配列であり、この場合は単純な整数です。この例では、各月に 83 のインスタンスがあります。x-yt = 1 の場合に対応する 83のスライスをどのように分離できaますか (月平均データセットを作成するため)。

4

1 に答える 1

0

(私の)質問に対する1つの可能な答えは、numpy.where

t = 1 の a のスライスを見つけるには、次のようにします。

>>> import numpy as np
>>> out = a[np.where(t == 1),:,:]

これにより、(少なくとも私には)少し紛らわしい出力が得られますが:

>>> out.shape
(1, 83, 50, 50)

しかし、平均が必要な場合は、

>>> out2 = np.mean(np.mean(out, axis = 0), axis = 0)

結果を期待どおりに減らします。

>>> out2.shape
(50,50)

誰でもこれを改善したり、ここで問題を確認したりできますか?

于 2014-05-20T15:51:25.593 に答える