Почему numy ndarray намного медленнее, чем списки для простых циклов?

Я только что получил эту работу на своем собственном веб-сайте, поэтому я решил, что стоит разместить мое решение здесь.

<a [routerLink]="baseUrlGoesHere" fragment="nameOfYourAnchorGoesHere">Link Text!</a>

<a name="nameOfYourAnchorGoesHere"></a>
<div>They're trying to anchor to me!</div>

И затем в вашем компоненте убедитесь, что вы включили это:

 import { ActivatedRoute } from '@angular/router';

 constructor(private route: ActivatedRoute) { 
     this.route.fragment.subscribe ( f => {
         const element = document.querySelector ( "#" + f )
         if ( element ) element.scrollIntoView ( element )
     });
 }
0
задан xi45 15 January 2019 в 15:58
поделиться

1 ответ

Это дорогостоящая операция np.array(list(combinations(n_lst,2)),dtype=int), потому что python должен сканировать каждого члена списка, проверять, является ли элемент «int-совместимым», преобразовывать его в целое число и сохранять в массиве.

Чтобы достичь непревзойденной производительности, вы должны продумать весь алгоритм в неповоротливом. Например:

In [63]: n_lst=list(range(100))

In [64]: %timeit twosum1(n_lst)
11.2 ms ± 1.64 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)


In [65]: np.vstack(np.where(np.add.outer(n_lst,n_lst)==7)).T
Out[65]: 
array([[0, 7],
       [1, 6],
       [2, 5],
       [3, 4],
       [4, 3],
       [5, 2],
       [6, 1],
       [7, 0]], dtype=int64)

In [66]: %timeit np.vstack(np.where(np.add.outer(n_lst,n_lst)==7)).T
306 µs ± 19 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Таким образом, вы выиграете фактор от 30 до 100, в зависимости от проблемы.

0
ответ дан B. M. 15 January 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: