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 不了解如何广播操作以提供您想要的输出。使用 transpose 两次,您可以获得比您建议的更简单的解决方案:

>>>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

我终于想出了:

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 回答
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 回答