Arrays 沿numpy数组的给定轴匹配并标记向量元素的位置

Arrays 沿numpy数组的给定轴匹配并标记向量元素的位置,arrays,numpy,Arrays,Numpy,我想沿着一个数组的给定轴(形状可能是n维的)标记所有的最大值,这在第一个轴上可以很好地工作,但是对于其余的我无法计算出来。我不想在axis上迭代,因为它们可以任意多个 >>> 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]]

我想沿着一个数组的给定轴(形状可能是n维的)标记所有的最大值,这在第一个轴上可以很好地工作,但是对于其余的我无法计算出来。我不想在axis上迭代,因为它们可以任意多个

>>> 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
但(当然)事实并非如此


如何使其工作?

作为对直接示例的响应,当您执行以下操作时:

>>>A == C
False
它“不起作用”,因为numpy不知道如何广播操作以提供所需的输出。 使用转置两次,您可以得到比您建议的更简单的解决方案:

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

我终于想到了:

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

晚会迟到了,但这次怎么样:

rollaxis(amax(A, ax)[...,newaxis], -1, ax) == A
它基本上是再次插入轴,由于amax,轴从阵列中脱落。然后,广播又开始工作了。 或者,相当于:

a = list(A.shape)
a[ax] = 1
amax(A, ax).reshape(a) == A

不管怎样,我只是得到了“假”回复。是的,我的错,我没有正确地得到你想要的。我的解决方案现在可以工作了,而且更简单。