1

2DポイントのMxNx2配列があります。各ポイントは、グリッドの測定されたプロパティの中心を表します。グラフ表示は以下のとおりです。白い点が位置です。

ここに画像の説明を入力してください

ポイント構造は次のようになります(形状:MxNx2):

[[[xij, yij], [xij, yij], ...]],
 [[xij, yij], [xij, yij], ...]],
 [[xij, yij], [xij, yij], ...]],
 [ ..., ...., ............... ],
 [[xij, yij], [xij, yij], ...]]]

必要な出力は次のようになります。

[[[x1, x2], [y1, y2]],
 [[x1, x2], [y1, y2]],
 ....................,
 [[x1, x2], [y1, y2]]

次のように、すべてのセグメントを1つずつ(x、y位置の各ペアを使用して)プロットできるようにします。

ここに画像の説明を入力してください

私は次のようなことを試みています:

segments = []
for row in xrange(a.shape[0] - 1):
    for col in xrange(a.shape[1] - 1):
        here = a[row, col]
        below = a[row+1, col]
        right = a[row, col+1]
        segments.extend(((here, right), (here, below)))

しかし、それは右端と下端を覆わないままにします。また、これはやや「ばかげた」、ベクトル化されていない、ブルートフォース攻撃の方法だと思います。おそらくメッシュ作成機能を使用するのに十分な一般的な問題のようです。

どんな提案でも大歓迎です!

4

2 に答える 2

2

これは、軸に個別にセグメントを追加することで実行できます。

for row in xrange(a.shape[0]):
    segments.extend( (a[row, col], a[row, col+1]) for col in xrange(a.shape[1] - 1) )
for col in xrange(a.shape[1]):
    segments.extend( (a[row, col], a[row+1, col]) for row in xrange(a.shape[0] - 1) )

またはzip()

s1 = (a.shape[0]*(a.shape[1]-1), 2)
s2 = (a.shape[1]*(a.shape[0]-1), 2)
segments = list(zip( a[:,:-1].reshape(s1), a[:,1:].reshape(s1))) + \
           list(zip( a[:-1,:].reshape(s2), a[1:,:].reshape(s2)))
于 2012-12-03T19:00:47.630 に答える
1

誰かが興味を持った場合に備えて、使用していたコードを変更しましたが、今では機能しますが、おそらくそれほどエレガントでも効率的でもありませんが...

pairs = []
for row in xrange(pointarray.shape[0]):
    for col in xrange(pointarray.shape[1]):
        here = pointarray[row, col]
        if row < pointarray.shape[0]-1:
            below = pointarray[row+1, col]
            pairs.append((here, below))
        if col < pointarray.shape[1]-1:
            right = pointarray[row, col+1]
            pairs.append((here, right))
于 2012-12-03T18:48:42.063 に答える