Переопределение (броска)

Для меня KDTree намного быстрее:

>>> import numpy as np
>>> from scipy.spatial import cKDTree as KDTree
>>> from timeit import timeit
>>> 
>>> z = np.random.randn(1000, 2)
>>> k = 5
>>> 
>>> KDTree(z).query(z, k)
(array([[0.        , 0.21130505, 0.22903208, 0.32009477, 0.38000444],
       [0.        , 0.03969915, 0.06698214, 0.08423566, 0.10740011],
       [0.        , 0.04964421, 0.08194808, 0.11576068, 0.12022531],
       ...,
       [0.        , 0.00721785, 0.03346301, 0.03617199, 0.04193239],
       [0.        , 0.05147871, 0.05619545, 0.08028866, 0.08744349],
       [0.        , 0.03733766, 0.06359033, 0.06861222, 0.0698981 ]]), array([[  0, 391, 134, 462, 575],
       [  1,  87, 879, 846, 122],
       [  2, 793, 314, 564, 483],
       ...,
       [997, 390, 432, 165, 952],
       [998, 194, 457, 775, 629],
       [999, 158, 522, 862, 791]]))
>>> nearst_sort(*z.T, k)
array([[  0., 391., 134., 462., 575.],
       [  1.,  87., 879., 846., 122.],
       [  2., 793., 314., 564., 483.],
       ...,
       [997., 390., 432., 165., 952.],
       [998., 194., 457., 775., 629.],
       [999., 158., 522., 862., 791.]])
>>> timeit(lambda: KDTree(z).query(z, k), number=100)
0.12790076900273561
>>> timeit(lambda: nearst_sort(*z.T, k), number=100)
6.5285790269990684

Это в 50 раз. Хотя, в зависимости от примера, это может зависеть.

11
задан DevinB 7 April 2009 в 12:34
поделиться

2 ответа

Необходимо реализовать явный или неявный оператор.

class Imp_A : AbsBase
{
   public static explicit operator Imp_B(Imp_A a)
   {
      Imp_B b = new Imp_B();

      // Do things with b

      return b;
   }
}

Теперь можно сделать следующее.

Imp_A a = new Imp_A();
Imp_B b = (Imp_B) a;
25
ответ дан 3 December 2019 в 03:37
поделиться

Я предложил бы, чтобы Вы записали Imp_B как это, если возможный:

class Imp_B : Imp_A
{
    private int A;
    private int B;
    private int C;
    private int D;
    private int lastE { get { return this.E.Last(); } }
}

Если Вы не можете на самом деле произойти из ImpB, для Вас невозможно "рассматривать" объект ImpA как ImpB прозрачно способ, которым Вы хотели бы, потому что они просто не то же самое в памяти. Так, реализуйте явное преобразование.

2
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

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