1

1 つの軸に沿って配列を周辺化しようとしており、元の 2-D ピークと同じ関連インデックスで 1-D ピークが発生することを確認しています。x次のアサーションが失敗するのは、どのような状況 (の形式) ですか?

def check(x,axis=None):
    import numpy
    m = numpy.sum(x, axis=axis)
    v,w = numpy.unravel_index(numpy.argmax(x), x.shape)
    assert(v==numpy.argmax(m))
    return

の場合x=numpy.array(range(15)).reshape(5,3)check(x,axis=0)エラーが発生しますが、発生check(x,axis=1)しません。an が発生する理由がわかりませんAssertionError- 私は愚かですか?

4

2 に答える 2

1

解きほぐされたインデックスの間違った座標をチェックしています。それ以外の

v,w=numpy.unravel_index(numpy.argmax(x),x.shape)
assert(v==numpy.argmax(m))

あなたはおそらくしたい

vw = numpy.unravel_index(numpy.argmax(x),x.shape)
assert vw[1 - axis] == numpy.argmax(m)

多分

v,w=numpy.unravel_index(numpy.argmax(x),x.shape)
assert (v if axis == 1 else w) == numpy.argmax(m)
于 2012-08-29T13:13:19.210 に答える
1

axisあなたの議論の価値は重要です。

配列を使用xすると、(N, M)m=np.sum(x, axis=axis)

  • スカラー if axis=None;
  • M配列の場合axis=0;
  • N配列_ axis=1_

したがって、np.argmax(m)常に 0 は if 、またはと(resp. ) if (resp. )axis=Noneの間の整数になります。0MNaxis=0axis=1

ただし、 your(v, w) = np.unravel_index(...)は常にv0 から までの整数として与えますN

ご覧のとおり、の場合axis=0、 の潜在的な値の範囲は の場合mと同じではありませんが、 のv場合は異なりaxis=1ます。

したがって、if 、またはifと比較mしてください(@ecatmur の回答がその方法を示しています)。vaxis=1waxis=0

于 2012-08-29T13:34:52.807 に答える