2014-12-14 18 views
5

Tôi đang cố gắng tạo một mảng dày đặc mà sau đó sẽ được phổ biến bởi một số giá trị ngày giờ. Tôi không thể làm cho nó hoạt động được, bạn có thể giúp đỡ không?Không thể điền các mảng datetime64 numpy

import numpy as np 
t = np.empty(3,dtype='datetime64') 
t 

Tôi nhận được TypeError: Invalid datetime unit "generic" in metadata. Cùng nếu tôi cố gắng:

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

tôi nhận được:

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

Cảm ơn trước cho bạn giúp đỡ!

Trả lời

5

Nó sẽ hoạt động nếu bạn cũng chỉ định tham số đơn vị thời gian khi tạo mảng. Ví dụ:

>>> 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]') 

Và sau đó bạn cũng có thể gán các giá trị theo yêu cầu:

>>> 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 không cho phép datetimes với các đơn vị chung (tức là không có đơn vị) được đại diện. Tạo mảng t mà không có tham số đơn vị và sau đó cố gắng truy cập phần tử đầu tiên t[0] sẽ nâng cao được lỗi này:

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

Ở đây, NumPy không có khả năng để suy ra những đơn vị đại diện của datetime nên có. Việc đoán có thể dẫn đến các giá trị sai lệch với độ dài khác nhau của tháng và năm dương lịch.

Điểm này không rõ ràng trong tài liệu nhưng có thể được lượm lặt từ datetime page và được ghi chú trong mã nguồn here.

+1

Vâng, rõ ràng là quá muộn đối với tôi ngày hôm qua, bởi vì tôi đã không thấy điều đó trên trang ngày giờ ... Spot on, Cảm ơn rất nhiều. – caliloo

+0

Không vấn đề gì - vui vì nó hữu ích –

+0

Cảm ơn sự trợ giúp! Tôi cũng bị mù với tài liệu ...^_ ~ – Sardathrion