我是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)
答案 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]