numpy找到好的价值指数

时间:2014-02-17 22:05:48

标签: python numpy

我是Numpy的新手。我想找到等于一组值的元素索引。例如,我知道这有效:

>>> x = np.array([[0, 1], [2, 3], [4, 5]])
>>> x
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> x[np.where(x[:,0] == 2)]
array([[2, 3]])

但为什么这不起作用?我想它应该是一个直接的扩展。否?

>>> x[np.where(x[:,0] == [2,4])]
array([], shape=(0, 2), dtype=int64)

3 个答案:

答案 0 :(得分:1)

==不起作用;当给出两个不同形状的数组时,它会尝试根据broadcasting rules广播比较。

如果要确定数组列表中的哪些元素,则需要in1d

>>> x = numpy.arange(9).reshape((3, 3))
>>> numpy.in1d(x.flat, [2, 3, 5, 7])
array([False, False,  True,  True, False,  True, False,  True, False], dtype=boo
l)
>>> numpy.in1d(x.flat, [2, 3, 5, 7]).reshape(x.shape)
array([[False, False,  True],
       [ True, False,  True],
       [False,  True, False]], dtype=bool)

答案 1 :(得分:0)

你想要

 x[np.where(x[:,0] in [2,4])] 

实际上可能不是有效的numpy

mask = numpy.in1d(x[:,0],[2,4])
x[mask]

除此之外,您可以将您的第一个条件重写为

x[x[:,0] == 2]

答案 2 :(得分:0)

从你的问题,我认为你的意思是你想要找到第一个元素等于某个特殊值的行。你说的方式我认为你的意思是x[:,0] in [2,4],而不是x[:,0] == [2,4],这在np.where()仍然不起作用。相反,你需要构建这样的东西:

x[np.where((x[:,0] == 2) | (x[:,0] == 4))]

由于这不能很好地扩展,您可能希望尝试在for循环中执行此操作:

good_row = ()
good_values = [2,4]
for val in good_values:
    good_row = np.append(good_row,np.where(x[:,0] == val))

print x[good_row]