比较numpy数组中的多个值

时间:2013-12-13 23:13:10

标签: python arrays numpy

我有一个numpy数组

a = numpy.array([1,2,3,0])

我想做点什么

a == numpy.array([0,1,2,3])

并获取

[[False, True,   False, False],
 [False, False,  True,  False],
 [False, False,  False, True ],
 [True,  False,  False, False]]

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

4 个答案:

答案 0 :(得分:4)

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

a = numpy.array([1,2,3,0])
b = numpy.array([0,1,2,3])
a[..., None] == b[None, ...]

结果:

>>> a[..., None] == b[None, ...]
array([[False,  True, False, False],
       [False, False,  True, False],
       [False, False, False,  True],
       [ True, False, False, False]], dtype=bool)

了解如何使用广播将大大改善您的NumPy代码。你可以在这里阅读:

答案 1 :(得分:1)

你可以重塑矢量和矢量并比较:

>>> a = numpy.array([1,2,3,0])
>>> b = numpy.array([0,1,2,3])
>>> a.reshape(-1,1) == b.reshape(1,-1)
array([[False,  True, False, False],
       [False, False,  True, False],
       [False, False, False,  True],
       [ True, False, False, False]], dtype=bool)

答案 2 :(得分:1)

以上是这样做的一种方式。另一种可能的方式(虽然我仍然不相信没有更好的方法)是:

import numpy as np
a = np.array([[1, 2, 3, 0]]).T
b = np.array([[0, 1, 2, 3]])
a == b
array([[False,  True, False, False],
   [False, False,  True, False],
   [False, False, False,  True],
   [ True, False, False, False]], dtype=bool)

我认为你只需要确保一个是列向量,一个是行向量,它会为你做比较。

答案 3 :(得分:0)

您可以使用列表推导来遍历a的每个索引,并将该值与b进行比较:

>>> import numpy as np
>>> a = np.array([1,2,3,0])
>>> b = np.array([0,1,2,3])
>>> ans = [ list(a[i] == b) for i in range(len(a)) ]
>>> ans
[[False,  True, False, False],
 [False, False,  True, False],
 [False, False, False,  True],
 [ True, False, False, False]]

我通过创建列表列表使输出与您的示例匹配,但您可以轻松地将答案设为Numpy数组。