如何在Python

时间:2015-06-04 08:34:43

标签: python numpy vector

我在Python中有两个向量:PredictionsLabels。我想要做的是找出这两个向量具有相同元素的索引集。例如,假设向量是:

Predictions = [4, 2, 5, 8, 3, 4, 2, 2]

     Labels = [4, 3, 4, 8, 2, 2, 1, 2]

因此两个向量具有相同元素的索引集将是:

Indices = [0, 3, 7]

我怎样才能在Python中获得这个?不使用for循环等。numpy中是否有内置函数?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

这是用numpy做的一种方法:

np.where(np.equal(Predictions, Labels))

相当于:

np.equal(Predictions, Labels).nonzero()

它将返回单个元素元组,因此要获取实际数组,请添加[0],如下所示:

np.equal(Predictions, Labels).nonzero()[0]

答案 1 :(得分:3)

对于两个数组a, b

a = np.array([1, 2, 3, 4, 5])
b = np.array([1, 3, 2, 4, 5])

np.equal(a,b)a==b具有相同的输出(我认为这首先更容易理解):

> array([ True, False, False,  True,  True], dtype=bool)

元素按元素检查,然后创建一个布尔数组。

np.where()在数组上按元素检查某些条件:

np.where(a > 2)
> (array([2, 3, 4]),)

所以合并np.wherenp.equal就是你想要的东西:

np.where(np.equal(a,b))
> (array([0, 3, 4]),)

编辑:没关系,只是看到我太慢了^^