您可以使用产生的布尔数组
in1d为编制索引
arange。反转
a以使索引不同于值:
>>> a[::-1]array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])>>> a = a[::-1]
intersect1d仍然返回相同的值…
>>> numpy.intersect1d(a, b)array([ 2, 7, 10])
但是
in1d返回一个布尔数组:
>>> numpy.in1d(a, b)array([ True, False, False, True, False, False, False, False, True, False, False], dtype=bool)
可以用来索引范围:
>>> numpy.arange(a.shape[0])[numpy.in1d(a, b)]array([0, 3, 8])>>> indices = numpy.arange(a.shape[0])[numpy.in1d(a, b)]>>> a[indices]array([10, 7, 2])
为了简化以上,不过,你可以使用
nonzero-这可能是最正确的做法,因为它返回的统一名单的元组
X,
Y…坐标:
>>> numpy.nonzero(numpy.in1d(a, b))(array([0, 3, 8]),)
或者,等效地:
>>> numpy.in1d(a, b).nonzero()(array([0, 3, 8]),)
结果可以用作
a没有问题的相同形状数组的索引。
>>> a[numpy.nonzero(numpy.in1d(a, b))]array([10, 7, 2])
但是请注意,在许多情况下,仅使用布尔数组本身,而不是将其转换为一组非布尔索引是有意义的。
最后,您还可以将boolean数组传递给
argwhere,从而产生形状略有不同的结果,该结果不适合索引,但可能对其他目的很有用。
>>> numpy.argwhere(numpy.in1d(a, b))array([[0], [3], [8]])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)