比较 numpy 数组中的多个值

fgr*_*egg 3 python arrays numpy

我有一个 numpy 数组

a = numpy.array([1,2,3,0])
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情

a == numpy.array([0,1,2,3])
Run Code Online (Sandbox Code Playgroud)

并得到

[[False, True,   False, False],
 [False, False,  True,  False],
 [False, False,  False, True ],
 [True,  False,  False, False]]
Run Code Online (Sandbox Code Playgroud)

换句话说,我希望第 i 列显示 的每个元素是否a等于 i。这感觉就像 numpy 可能会变得容易的事情。有任何想法吗?

YXD*_*YXD 6

这里使用的关键概念是广播。

a = numpy.array([1,2,3,0])
b = numpy.array([0,1,2,3])
a[..., None] == b[None, ...]
Run Code Online (Sandbox Code Playgroud)

结果:

>>> a[..., None] == b[None, ...]
array([[False,  True, False, False],
       [False, False,  True, False],
       [False, False, False,  True],
       [ True, False, False, False]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

了解如何使用广播将极大地改进您的 NumPy 代码。你可以在这里读到它: