在一维NumPy数组中查找值的索引/位置(具有相同的值)

时间:2019-11-12 12:58:08

标签: python arrays numpy indexing

我想在数组本身内的一维NumPy数组中找到随机选择的数字的索引/位置,但是当我尝试以下操作时:

a = np.array(np.linspace(1,10,10))
b = np.random.choice(a)
print(a.index(b))

它不起作用,也无法弄清楚问题出在哪里。有人有主意吗?

谢谢!

编辑:如果NumPy数组中的值相同,那么如何仅索引随机选择的值,例如:

a = np.array(np.linspace(10,10,10))

3 个答案:

答案 0 :(得分:1)

您必须使用where功能,在这里Is there a NumPy function to return the first index of something in an array?

import numpy as np
a = np.array(np.linspace(1,10,10))
b = np.random.choice(a)
print(np.where(a==b))

如果值相同,则where返回多个索引,例如:

a = np.array(np.linspace(10,10,10))
print(np.where(a==10))

>>> (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),)

由于所有位置都为10,因此所有索引都被翻转了。

答案 1 :(得分:0)

这将为您提供所需的输出:

np.where(a==b)[0][0]

答案 2 :(得分:0)

NumPy的where()函数可以实现您想要的功能,如其他答案所述。如果只有一维数组,并且只希望a中第一个元素的索引等于b,则where()既笨拙又效率低下。相反,您可以使用

import numpy as np
a = np.linspace(1, 10, 10)  # Hint: the np.array() is superfluous
b = np.random.choice(a)
index = next(i for i, el in enumerate(a) if el == b)
print(index, a[index])