SORU
18 Temmuz 2011, PAZARTESİ


Hızlı onay NaN için NumPy içinde

NumPy bir dizi X NaN geçtiği (np.nan) kontrol etmek için en hızlı yol arıyorum. np.isnan(X) şekil boolean bir dizi oluşturur bu yana söz konusu değil, potansiyel olarak devasa olan X.shape,.

np.nan != np.nan çünkü çalışmak için değil gibi görünüyor np.nan in X, ama denedim. Hızlı ve verimli hafıza bunu yapmak için bir yolu var mı?

(Rica etmek isteyenler"": söyleyemem. nasıl dev Bu kütüphane kodu için giriş onaylama.)

CEVAP
18 Temmuz 2011, PAZARTESİ


Ray'in çözüm iyidir. Ancak, benim makinede 2.5 x daha hızlı numpy.min yerine numpy.sum kullanmak için:

In [13]: %timeit np.isnan(np.min(x))
1000 loops, best of 3: 244 us per loop

In [14]: %timeit np.isnan(np.sum(x))
10000 loops, best of 3: 97.3 us per loop

min, sum modern donanımlar oldukça pahalı olma eğilimindedir hangi dallanma gerektirmez aksine. Bu muhtemelen sum daha hızlı olmasının nedeni budur.

editYukarıdaki test sağ dizinin ortasında tek bir NaN ile yapıldı.

İlginç min onların yokluğunda daha NaNs huzurunda daha yavaş olduğunu unutmayın. Ayrıca NaNs dizinin başlangıç için yaklaştıkça daha yavaş almak gibi görünüyor. Diğer yandan sum'nın işlem hacmi sürekli NaNs olup olmadığını ve nerede olduklarını, ne olursa olsun gibi görünüyor

In [40]: x = np.random.rand(100000)

In [41]: %timeit np.isnan(np.min(x))
10000 loops, best of 3: 153 us per loop

In [42]: %timeit np.isnan(np.sum(x))
10000 loops, best of 3: 95.9 us per loop

In [43]: x[50000] = np.nan

In [44]: %timeit np.isnan(np.min(x))
1000 loops, best of 3: 239 us per loop

In [45]: %timeit np.isnan(np.sum(x))
10000 loops, best of 3: 95.8 us per loop

In [46]: x[0] = np.nan

In [47]: %timeit np.isnan(np.min(x))
1000 loops, best of 3: 326 us per loop

In [48]: %timeit np.isnan(np.sum(x))
10000 loops, best of 3: 95.9 us per loop

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Austin Evans

    Austin Evans

    5 AĞUSTOS 2007
  • Curso Online Gratuito

    Curso Online

    4 Aralık 2011
  • Google Developers

    Google Devel

    23 AĞUSTOS 2007