Как найти индекс объекта min / max в массиве объектов? - PullRequest
1 голос
/ 30 сентября 2019

В массиве массивов объектов (где каждый объект имеет числовой атрибут y, который можно получить с помощью метода get_y ()), как мне получить индекс объекта с максимальным (или минимальным) атрибутом y (безявный цикл; чтобы сэкономить время)? Если бы myarray был списком Python, я мог бы использовать следующее, но ndarray, похоже, не поддерживает индекс. Кроме того, numpy argmin, по-видимому, не позволяет предоставлять ключ. minindex = myarray.index (мин (myarray, ключ = лямбда-x: x.get_y ()))

1 Ответ

0 голосов
/ 30 сентября 2019

Некоторые моменты времени, сравнивая числовой 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)
...