Python numpy.where是否总是按升序输出索引?
例如,我有一个1D布尔数组Python numpy.where是否总是按升序输出索引?,python,numpy,Python,Numpy,例如,我有一个1D布尔数组a a = numpy.array([0, 1, 0, 0, 1, 1, 1, 0, 1], dtype='bool') 我想使用numpy.where查找真实元素的索引 idx = numpy.where(a)[0] 我可以假定输出idx总是按升序排序吗?numpy.where能保证吗?我之所以提出这个问题,是因为文档中没有提到它和numpy。其中是用C编写的,它的工作原理并不明显。如果绝对最大速度不是最重要的,您可以简单地将您的假设明确地编码出来: idx =
a
a = numpy.array([0, 1, 0, 0, 1, 1, 1, 0, 1], dtype='bool')
我想使用numpy.where
查找真实元素的索引
idx = numpy.where(a)[0]
我可以假定输出
idx
总是按升序排序吗?numpy.where
能保证吗?我之所以提出这个问题,是因为文档中没有提到它和numpy。其中
是用C编写的,它的工作原理并不明显。如果绝对最大速度不是最重要的,您可以简单地将您的假设明确地编码出来:
idx = np.arange(len(a))[a]
也就是说,
np。非零(a)
保证按照文档的顺序给出索引。与上面的方法相比,它的显式性稍差,但会更快。调用numpy.where
而不带条件相当于np.asarray(arr).nonzero()
(在这种情况下,应该使用它来代替numpy.where
)<代码>非零保证:“a中的值总是按照行的主调,C样式的顺序进行测试和返回。”如果您对源代码感兴趣,它是正确的。您可以清楚地看到数组是按行主顺序迭代的。此外,在@user3483203中有一篇关于行主顺序
的文章,那么这是否意味着它将始终以升序返回索引数组?对于1D数组,是的,始终如此。