Python 使用numpy避免循环或列表理解

Python 使用numpy避免循环或列表理解,python,performance,numpy,Python,Performance,Numpy,可以更换吗 np.concatenate([np.where(x == i)[0] for i in range(y)]) 用一些不涉及循环的东西 我想取一个数组x,例如[0,1,2,0,2,2],在本例中取一个数字y,例如2,然后输出一个数组[0,3,1,2,4,5]。 例如,对于数组中的每个整数,请按顺序写入其索引位置 也许是某种numpy函数可以提供比列表理解更高的性能?这里有一种使用argsort的方法: 下面是一种使用argsort的方法: 使用会起作用 numpy.argsort(

可以更换吗

np.concatenate([np.where(x == i)[0] for i in range(y)])
用一些不涉及循环的东西

我想取一个数组x,例如[0,1,2,0,2,2],在本例中取一个数字y,例如2,然后输出一个数组[0,3,1,2,4,5]。 例如,对于数组中的每个整数,请按顺序写入其索引位置


也许是某种numpy函数可以提供比列表理解更高的性能?

这里有一种使用argsort的方法:


下面是一种使用argsort的方法:

使用会起作用

numpy.argsort([0, 1, 2, 0 , 2, 2])
=> array([0, 3, 1, 2, 4, 5])
使用会起作用

numpy.argsort([0, 1, 2, 0 , 2, 2])
=> array([0, 3, 1, 2, 4, 5])

argsort的问题在于,如果值相同,它似乎不一定会按索引在数组中出现的顺序返回索引。例如,np.argsort[0,1,0,0]不保证返回[0,2,3,1]-它可以返回[0,3,2,1],实际上使用稳定算法对np中的kind=stable进行排序。argsort似乎以所需的方式保持顺序。感谢您的回答argsort的问题在于,如果值相同,它似乎不一定会按照索引在数组中出现的顺序返回索引。例如,np.argsort[0,1,0,0]不保证返回[0,2,3,1]-它可以返回[0,3,2,1],实际上使用稳定算法对np中的kind=stable进行排序。argsort似乎以所需的方式保持顺序。感谢您的回答,如果y=2np。concatenate[np.wherex==i[0]for i in range y]不会返回[0,3,1,2,4,5],因为range y给出了列表[0,1]的一个可数,如果y=2np。concatenate[np.wherex==i[0]for i in range y]不会返回[0,3,1,2,4,5],因为range y给出了列表[0,1]的一个可数
numpy.argsort([0, 1, 2, 0 , 2, 2])
=> array([0, 3, 1, 2, 4, 5])