2012-03-02 20 views
28

aşağıda gibi genfromtxt çalıştırıyorum:numpy.genfromtxt, 2B dizi değil, tuple benzeyen bir dizi oluşturur — neden?

date_conv = lambda x: str(x).replace(":", "/") 
time_conv = lambda x: str(x) 

a = np.genfromtxt(input.txt, delimiter=',', skip_header=4, 
     usecols=[0, 1] + radii_indices, converters={0: date_conv, 1: time_conv}) 

input.txtthis gist den olduğu yere.

>>> np.shape(a) 
(918,) 

yerine dizilerini bir dizi gibi görünüyor: Ben sonuçlarına baktığımızda

, bir 1D dizi değil 2D dizidir

>>> a[0] 
('06/03/2006', '08:27:23', 6.4e-05, 0.000336, 0.001168, 0.002716, 0.004274, 0.004658, 0.003756, 0.002697, 0.002257, 0.002566, 0.003522, 0.004471, 0.00492, 0.005602, 0.006956, 0.008442, 0.008784, 0.006976, 0.003917, 0.001494, 0.000379, 6.4e-05) 

Ben dönüştürücüleri kaldırırsanız gayet iyi çalışıyor ve 2D dizi üretir genfromtxt çağrısından şartname:

>>> np.shape(a) 
(918, 24) 

cevap

38

neler döndürülür yapılı ndarray olarak adlandırılır, bkz. örn .: http://docs.scipy.org/doc/numpy/user/basics.rec.html. Bunun nedeni, verilerinizin homojen olmaması, yani tüm öğelerin aynı türde olmamasıdır: veriler her iki dizeyi de içerir (ilk iki sütun) ve yüzer. Numpy dizileri homojen olmalıdır (bir açıklama için bkz. here).

Yapılandırılmış diziler, her kayıt veya satır için tupl'leri kullanarak bu homojenlik kısıtını çözer, bu da döndürülen dizinin 1D'nin nedenidir: bir dizi tuple, ancak her bir tuple (satır) birkaç veriden oluşur, böylece bunu satır ve sütun olarak kabul edebilir. Farklı sütunlara örneğin a['Julian_Day'] örneğinde a['nameofcolumn'] olarak erişilebilir.

ilk iki sütun için dönüştürücüler çıkarmadan 2D dizisi döndürür sebebi bu durumda, genfromtxt Saygılarımızla aynı türdeki tüm veri ve normal bir ndarray döndürülür öyle mi (varsayılan tür şamandıra, ancak Bunu dtype bağımsız değişkeniyle belirtebilirsiniz).

DÜZENLEME: Sütun adlarına yararlanmak istiyorsanız, (sadece üç yaşında skip_header ve set) names argüman kullanabilirsiniz:

a2 = np.genfromtxt("input.txt", delimiter=',', skip_header=3, names = True, dtype = None, 
        usecols=[0, 1] + radii_indices, converters={0: date_conv, 1: time_conv}) 

sen ör yapabilirsiniz:

>>> a2['Dateddmmyyyy'] 
array(['06/03/2006', '06/03/2006', '18/03/2006', '19/03/2006', 
     '19/03/2006', '19/03/2006', '19/03/2006', '19/03/2006', 
     '19/03/2006', '19/03/2006'], 
     dtype='|S10')