如何在 numpy 对象数组中找到最小/最大对象的索引?



在对象的numpy数组中(其中每个对象都有一个可以通过方法get_y((检索的数字属性y(,如何获取具有最大(或最小(y属性的对象的索引(没有显式循环;以节省时间(?如果myarray是一个python列表,我可以使用以下内容,但ndarray似乎不支持索引。此外,numpy argmin 似乎不允许提供密钥。 minindex = myarray.index(min(myarray, key = lambda x: x.get_y(

(((

一些计时,比较数字dtype,对象dtype和列表。 得出你自己的结论:

In [117]: x = np.arange(1000)                                                   
In [118]: xo=x.astype(object)                                                   
In [119]: np.sum(x)                                                             
Out[119]: 499500
In [120]: np.sum(xo)                                                            
Out[120]: 499500
In [121]: timeit np.sum(x)                                                      
10.8 µs ± 242 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [122]: timeit np.sum(xo)                                                     
39.2 µs ± 673 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [123]: sum(x)                                                                
Out[123]: 499500
In [124]: timeit sum(x)                                                         
214 µs ± 6.58 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [125]: timeit sum(xo)                                                        
25.3 µs ± 4.54 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [126]: timeit sum(x.tolist())                                                
29.1 µs ± 26.7 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [127]: timeit sum(xo.tolist())                                               
14.4 µs ± 120 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [129]: %%timeit  temp=x.tolist() 
...: sum(temp)                                                                      
6.27 µs ± 18.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)