2011-03-18 17 views
11

numaralı sayısal float dizisi olarak ayarlayabilir miyim? Sayısal programımda bir sorunum var ve bunun hassas bir sorun olup olmadığını merak ediyorum (örn. Yuvarlama hatası). Programımdaki tüm float dizilerini, kodumdan geçmeden ve dtype = 'float128' yazmadan, float128 dizilerine dönüştürmenin hızlı bir yolu var mı? Dizilerim float64, ama ben asla açık bir şekilde dtype = 'float64' yazdım, bu yüzden bu varsayılan davranışı değiştirmenin bir yolu olduğunu umuyordum.Float128'i

+0

var float64' 'bir' numpy.float_' istenen sabit olmakla birlikte, numpy.float128' 'değiştirmeyi ve isteyen' numpy.array ([1.1]). Dtype' geri 'float64' tutar. – eumiro

+0

Float128 desteği kabataslak, irc windows'la çalışmayacak. Float96 ile aynı şeyi deneyin. – tillsten

+0

Linux (Ubuntu) sistemi üzerinde çalışıyorum. Orada destek nasıl? Pencerelerde çalışmadığı gerçeği, sadece kendim için bir kontrol olduğu için gerçekten önemli değil. – Eskil

cevap

15

Bunu başarmak için değiştirebileceğiniz merkezi bir "yapılandırma" olduğunu sanmıyorum. Ne yapabilirsin bazı seçenekler:

  1. yalnızca numpy fabrika fonksiyonlarının çok az tarafından diziler oluşturuyorsanız, kendi sürümleri tarafından bu işlevleri yerine. Bir modülünü mynumpy.py

    ve ithalat yazabilir Eğer

    from numpy import empty 
    

    gibi bu işlevleri içe Eğer

    import numpy 
    

    yapıyorsanız sadece

    from numpy import float128, empty as _empty 
    def empty(*args, **kwargs): 
        kwargs.update(dtype=float128) 
        _empty(*args, **kwargs) 
    

    yapabilirsinizhep dtype=myfloat kullanmak o

    import mynumpy as numpy 
    
  2. gibi kodunuzu refactor. Bu gelecekte bu tür değişiklikleri kolaylaştıracaktır. Bu yaklaşımı, mümkün olan en az sayıda yerde kodlanmış gerçek veri türüne sahip olmak için numpy.empty_like(), numpy.zeros_like() ve numpy.ones_like() ile birleştirebilirsiniz.

  3. Alt sınıf numpy.ndarray ve yalnızca özel dizilerinizi yeni diziler oluşturmak için kullanın.

+0

Bunları sırayla denemek muhtemelen en iyisidir: 1-2-3. Son seçenek (alt sınıf "numpy.ndarray") zariftir, ancak tuzaklar vardır. Örneğin, dizinin dilimlerini öznitelikler, yani 'self.myslice = self [0,:] 'olarak saklayarak dizi çöp toplama işlemini yanlışlıkla kırdım. Daha fazla işlem yaptığım için RAM'im yavaş yavaş doldu. –