1

配列の特定の軸 (形状は n 次元である可能性があります) に沿ってすべての最大値をマークしたいのですが、これは最初の軸に沿ってうまく機能しますが、残りの部分については理解できません。恣意的に多くの軸が存在する可能性があるため、軸を反復処理したくありません。

>>> A = range(5)*3
>>> A = array(a).reshape([3,5], order='F')
>>> A
array([[0, 3, 1, 4, 2],
       [1, 4, 2, 0, 3],
       [2, 0, 3, 1, 4]])
>>> B = amax(A, axis= 0)
>>> C = amax(A, axis= 1)
>>> B == A
array([[False, False, False,  True, False],
       [False,  True, False, False, False],
       [ True, False,  True, False,  True]], dtype=bool)

これが私がやりたいことです:

>>> C == A
False

しかし(もちろん)そうではありません。

これを機能させる方法は?

4

3 に答える 3

1

あなたの直接の例に応じて、あなたがするとき:

>>>A == C
False

numpy は操作をブロードキャストして必要な出力を提供する方法を理解していないため、「機能しません」。転置を 2 回使用すると、提案したものよりも簡単な解決策を得ることができます。

>>>C = amax(A, axis=1)
>>>transpose(C == transpose(A))
array([[False, False, False,  True, False],
       [False,  True, False, False, False],
       [False, False, False, False,  True]], dtype=bool)
于 2012-06-05T11:37:02.640 に答える
1

パーティーに遅れましたが、これはどうですか:

rollaxis(amax(A, ax)[...,newaxis], -1, ax) == A

これは基本的に、amax のために配列から脱落した軸を再度挿入することです。その後、ブロードキャストが再び機能します。または、同等に:

a = list(A.shape)
a[ax] = 1
amax(A, ax).reshape(a) == A
于 2012-11-28T14:48:42.067 に答える
1

私は最終的に思いついた:

def tiletuple(t,axis):
  m = [1]*t.ndim
  m[axis] = t.shape[axis]
  return m

ax = 1
tile(expand_dims(amax(A, axis=ax), axis=ax), tiletuple(A, ax)) == A
于 2012-07-03T09:39:52.513 に答える