2

私はプログラミングにかなり慣れていないので、これが古典的で些細な質問であれば申し訳ありません。100x100によってプロットされた値の2D 配列がありますmatplotlib。この画像では、各セルに値 ( 0.0~の範囲1.0) と ID (左上隅から始まる ~ の0範囲) があります。2 つの辞書9999を生成する 2x2 の移動ウィンドウを使用して、マトリックスをサンプリングしたい:

  • 1 番目の辞書:キーは 4 つのセルの交点を表します。値は、隣接する 4 つのセルの ID を持つタプルを表します (下の画像を参照 -交差は "N" で表されます)。
  • 2 番目の辞書:キーは 4 つのセルの交点を表します。値は、隣接する 4 つのセルの平均値を表します (下の画像を参照)。

以下の例 (左上のパネル{'0': (0,1,100,101)}) では、N の ID=0 があり、セルには右側に向かって 0 から 99 まで、下に向かって 0 から 9900 まで、ステップ = 100 の番号が付けられているため、最初の辞書が生成 されます。0.775 は N の 4 つの隣接セルの平均値であるため、 2 番目の辞書は を生成{'0': 0.775}します。もちろん、これらの辞書には、2D 配列にある「交点」と同じ数のキーが必要です。

これはどのように達成できますか?この場合、辞書は最良の「ツール」ですか?君たちありがとう!

ここに画像の説明を入力

PS: 私は独自の方法を試しましたが、私のコードは不完全で間違っていて、理解できません:

a=... #The 2D array which contains the cell values ranging 0.0 to 1.0
neigh=numpy.zeros(4)
mean_neigh=numpy.zeros(10000/4)
for k in range(len(neigh)):
    for i in a.shape[0]:
        for j in a.shape[1]:
            neigh[k]=a[i][j]
            ...
4

2 に答える 2

1

ディメンションと行と列dataのオリジナルがあるとしましょう。numpy.arraydrdc

dr = data.shape[0]
dc = data.shape[1]

Keys対象のインデックスを返す関数として、およびValues4 つの隣接セルの計算された平均を含むリストとして生成できます。その場合、次のKeysようになります。

def Keys(x):
    xmod = x + (x+1)/dc  # dc is in scope
    return [xmod, xmod + 1, xmod + dc, xmod + 1 + dc]

最後の行と列が含まれていないため、の次元Valuesは に等しくなります。dr-1 * dc-1移動平均として計算し、1D後で形状を変更できます (リンクからのインスピレーション)。

Values = ((d[:-1,:-1] + d[1:,:-1] + d[:-1,1:] + d[1:,1:])/4).reshape((dr-1)*(dc-1))

例:

dr = 3
dc = 5

In: np.array(range(dc*dr)).reshape((dr, dc))  # data
Out: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

In: [Keys(x) for x in range((dr-1)*(dc-1))]
Out: 
    [[0, 1, 5, 6],
     [1, 2, 6, 7],
     [2, 3, 7, 8],
     [3, 4, 8, 9],
     [5, 6, 10, 11],
     [6, 7, 11, 12],
     [7, 8, 12, 13],
     [8, 9, 13, 14]]

In: Values
Out: array([ 3,  4,  5,  6,  8,  9, 10, 11])
于 2015-10-19T15:14:39.243 に答える