2

n 次元配列の別の質問です。n 次元配列の各値をその隣の値と比較できるようにしたいと考えています。たとえば、 a が2次元の配列である場合、次を確認できるようにしたい:

a[y][x]==a[y+1][x]

すべての要素に。したがって、基本的にすべての次元のすべての隣人をチェックします。現在、私は次の方法でそれを行っています:

for x in range(1,a.shape[0]-1):
   do.something(a[x])

エッジで範囲外のインデックスに遭遇しないように、配列の形状が使用されます。したがって、配列内のすべての要素に対してnDでこのようなことをしたい場合は、乱雑に見えるn個のforループが必要です。スライスしてそうする方法はありますか?a==a[:,-1,:] のようなもの、またはこれを完全に間違って理解していますか? スライスを最後に停止するように指示する方法はありますか? それとも、まったく別の方法で物事を機能させる別のアイデアがあるのでしょうか? マスク配列?ジョニに挨拶

4

3 に答える 3

5

何かのようなもの:

a = np.array([1,2,3,4,4,5])
a == np.roll(a,1)

返す

array([False, False, False, False,  True, False], dtype=bool

高次元でも軸を指定できますが、他の人が言っているように、値がラップアラウンドするときに何らかの方法でエッジを処理する必要があると言われています (名前から推測できるように)。

2D での完全な例:

# generate 2d data
a = np.array((np.random.rand(5,5)) * 10, dtype=np.uint8)

# check all neighbours
for ax in range(len(a.shape)):
    for i in [-1,1]:
        print a == np.roll(a, i, axis=ax)
于 2012-12-10T16:46:11.587 に答える
2

これも役立つ場合があります。これにより、軸 = 1 に沿って各要素が次の要素と比較されます。もちろん、軸または距離を調整できます。コツは、オペレーターの両側が==同じ形状であることを確認することです。

a[:, :-1, :] == a[:, 1:, :]
于 2012-12-10T18:21:05.473 に答える
0

ちょうどどうですか:

np.diff(a) != 0

?

他の軸の隣人が必要な場合は、 np.swapaxes(a) の結果を比較して、何らかの方法で結果をマージしますか?

于 2012-12-10T17:26:27.307 に答える