2017-09-23 119 views
0

這裏是我的簡單對象:如何將`numpy.datetime64`列表轉換爲`matplotlib.dates`?

[numpy.datetime64('2017-01-03T00:00:00.000000000'), 
numpy.datetime64('2017-01-04T00:00:00.000000000'), 
numpy.datetime64('2017-01-05T00:00:00.000000000'), 
numpy.datetime64('2017-01-06T00:00:00.000000000'), 
numpy.datetime64('2017-01-09T00:00:00.000000000'), 
numpy.datetime64('2017-01-10T00:00:00.000000000'), 
numpy.datetime64('2017-01-11T00:00:00.000000000'), 
numpy.datetime64('2017-01-12T00:00:00.000000000'), 
numpy.datetime64('2017-01-13T00:00:00.000000000'), 
numpy.datetime64('2017-01-16T00:00:00.000000000'), 
numpy.datetime64('2017-01-17T00:00:00.000000000'), 
numpy.datetime64('2017-01-18T00:00:00.000000000'), 
numpy.datetime64('2017-01-19T00:00:00.000000000'), 
numpy.datetime64('2017-01-20T00:00:00.000000000'), 
numpy.datetime64('2017-01-23T00:00:00.000000000'), 
numpy.datetime64('2017-01-24T00:00:00.000000000'), 
numpy.datetime64('2017-01-25T00:00:00.000000000'), 
numpy.datetime64('2017-01-26T00:00:00.000000000'), 
numpy.datetime64('2017-01-27T00:00:00.000000000'), 
numpy.datetime64('2017-02-01T00:00:00.000000000')] 

而是採用了環空列表轉換一個接一個,有沒有任何捷徑?謝謝。

+1

嗯,列表內涵/發電機表達式?但他們仍然一個接一個地處理項目。 – user3159253

+1

https://stackoverflow.com/questions/34843513/python-matplotlib-dates-date2num-converting-numpy-array-to-matplotlib-datetimes這有幫助嗎? –

+1

映射函數? – wwii

回答

1

我最喜歡的解決方案是這個線程似乎有點隱藏: Converting between datetime, Timestamp and datetime64,這是使用tolist()。由於tolist()返回不同類型,根據陣列類型,需要轉換爲ms才能獲得datetime對象。可以直接用matplotlib繪製對象,也可以在其上應用matplotlib.dates.date2num()

所以如果a是numpy的陣列如上,

x = a.astype("M8[ms]").tolist() 

導致日期時間的對象的列表。

完整的示例:

import numpy as np 
import matplotlib.pyplot as plt 
from datetime import datetime 
import matplotlib.dates as mdates 

a = np.array([np.datetime64('2017-01-03T00:00:00.000000000'), 
    np.datetime64('2017-01-04T00:00:00.000000000'), 
    np.datetime64('2017-01-05T00:00:00.000000000'), 
    np.datetime64('2017-01-06T00:00:00.000000000'), 
    np.datetime64('2017-01-09T00:00:00.000000000'), 
    np.datetime64('2017-01-10T00:00:00.000000000'), 
    np.datetime64('2017-01-11T00:00:00.000000000'), 
    np.datetime64('2017-01-12T00:00:00.000000000'), 
    np.datetime64('2017-01-13T00:00:00.000000000'), 
    np.datetime64('2017-01-16T00:00:00.000000000'), 
    np.datetime64('2017-01-17T00:00:00.000000000'), 
    np.datetime64('2017-01-18T00:00:00.000000000'), 
    np.datetime64('2017-01-19T00:00:00.000000000'), 
    np.datetime64('2017-01-20T00:00:00.000000000'), 
    np.datetime64('2017-01-23T00:00:00.000000000'), 
    np.datetime64('2017-01-24T00:00:00.000000000'), 
    np.datetime64('2017-01-25T00:00:00.000000000'), 
    np.datetime64('2017-01-26T00:00:00.000000000'), 
    np.datetime64('2017-01-27T00:00:00.000000000'), 
    np.datetime64('2017-02-01T00:00:00.000000000')]) 

x = a.astype("M8[ms]").tolist() 
y = np.random.rand(len(a)) 

plt.plot(x, y, color="limegreen") 

plt.show()