Python numpy 选取数组前几位的值和下标

Python014

Python numpy 选取数组前几位的值和下标,第1张

针对一维的numpy的ndarray数组,获取前N位的具体的数值(value),

针对一维的numpy的ndarray数组,获取前N位所在的下标(index),

一个是原地sort,一个是np.argsort()获取下标。如果是多维数组,可以先采用arr.flatten()转换为一维的数组。

那是当然的。

6+1的话,一共127.6亿个排列。每个都至少要执行最内层的for、if、+=三行命令,就算只需要10个指令周期,就是1276亿个指令周期,假设你是3G主频,一秒也才执行30亿个指令,这也得40秒才能跑完,何况光是一个m=m+1就远远不止10个指令能完成,因为python中这是一个重新建立m对象的过程,再加上外层的循环,总的来说,是这一个没有意义的过程,因为需要的时间太长了。

如果是计算组合的话,就会少很多,组合即所有排列中,前6个数不重复的那一部分,这就少很多,33选6,然后乘以16,只有17721088个组合,这个量就少了很多。

所以,整个思路上就要改变。不使用组合计算,一定要去遍历所有组合来得到总数,也不是不行,但写法也不是这样写的。组合是前6个数不重复,那么,第一个数已经决定了第二个数的最大取值,也就是说,内层循环range的第二个参数,直接取外层循环的循环变量即可。

进一步优化就是前6层的for,range第一个参数分别是6,5,4,3,2,1,结果是一样的,大约能快10%左右吧。