2014-12-14 16 views
5

Daha sonra bazı tarihsaat değerleri tarafından doldurulacak bir sayı dizisi oluşturmaya çalışıyorum. İşe yaramayabilirim, lütfen yardım edebilir misiniz? Bir TypeError: Invalid datetime unit "generic" in metadata aldım. Aynı Denersem:Numpy datetime64 dizileri doldurulamıyor

import numpy as np 
t = np.empty(3,dtype='datetime64') 
t[0] = np.datetime64('2014-12-12 20:20:20') 

alıyorum:

TypeError : Cannot cast numpy timedelta64 scalar from metadata [m] to according to the rule 'same_kind'.

peşin yardımcı için!

cevap

5

Diziyi oluştururken bir zaman birimi parametresi de belirtirseniz işe yarayacaktır. Örneğin:

>>> t = np.empty(3, dtype='datetime64[s]') 
>>> t 
array(['1970-01-01T00:00:00+0000', '1970-01-01T00:00:00+0000', 
     '1970-01-01T00:00:00+0000'], dtype='datetime64[s]') 

Ve sonra da gerektiği gibi değer atayabilirsiniz:

>>> t[0] = np.datetime64('2014-12-12 20:20:20') 
>>> t 
array(['2014-12-12T20:20:20+0000', '1970-01-01T00:00:00+0000', 
     '1970-01-01T00:00:00+0000'], dtype='datetime64[s]') 

NumPy jenerik birimlerinin (yani hiçbir birimleri) ile tarihsaat izin vermez temsil edilecek. Birim parametre olmadan diziyi t oluşturma ve sonra bu hatayı yükseltecek birinci elemanı t[0] erişmeye çalışan:

İşte
ValueError: Cannot convert a NumPy datetime value other than NaT with generic units 

, NumPy datetime temsil olması gereken birimler anlaması mümkün değildir. Tahmin etmek, takvim aylarının ve yıllarının değişen uzunlukları dikkate alındığında hatalı değerlere yol açabilir.

Bu nokta, belgelerde çok açık değildir ancak datetime page'dan toplanabilir ve kaynak kodunda here belirtilmiştir.

+1

Evet, dün benim için açıkça çok geç oldu, çünkü bunu datetime sayfasında görmedim ... Spot on, Çok teşekkürler. – caliloo

+0

Sorun değil - yardımcı olduguma memnun oldum –

+0

Yardımın için teşekkürler! Dokümanlara da kör davranıyordum ...^_ ~ – Sardathrion