我正在关注tutorial,由senddex负责将UNIX时间戳转换为matplotlib可以识别的日期。 我仍然是新手,虽然我了解documentation中给出的示例,因为它们非常简单,但我不明白为什么在这种情况下使用np.vectorize:
date_convert = np.vectorize(dt.datetime.fromtimestamp)
date = date_convert(date)
任何帮助将不胜感激!谢谢您的耐心等待!
答案 0 :(得分:4)
要使其更加透明,让我们创建自己的矢量化器。
import datetime as dt
data = [1326244364, 1326844366, 1327245361]
def myfromtimestampfunction(timestamp):
return dt.datetime.fromtimestamp(timestamp)
def myvectorizer(input_func):
def output_func(array_of_numbers):
return [input_func(a) for a in array_of_numbers]
return output_func
date_convert = myvectorizer(myfromtimestampfunction)
dates = date_convert(data)
print(dates)
myvectorizer
接受一个函数,然后输出一个函数。输入功能只能将单个数字作为输入。输出函数可以迭代。
这样可能更容易理解
myfromtimestampfunction(data)
将失败,因为data
是一个列表,但是myfromtimestampfunction
需要一个数字。 date_convert
是 是一个功能,即矢量化器中的output_func
。因此,它可以将参数作为输入。答案 1 :(得分:1)
np.vectorize
所做的基本上是使datetime
函数可在数组而不是单个值上使用。
如果使用dt.datetime.fromtimestamp
是正确的,它仅接受1个参数,但也仅适用于1个值。因此,以下具有2个日期的示例将显示一个错误。
import datetime as dt
import numpy as np
dates = np.array([13444,9000009])
dt.datetime.fromtimestamp(dates)
TypeError:只有大小为1的数组可以转换为Python标量
但是,使用np.vectorize
会创建一个名为date_convert
的新函数,该函数与dt.datetime.fromtimestamp
的功能相同,但允许在数组中使用多个值。
date_convert = np.vectorize(dt.datetime.fromtimestamp)
dates = np.array([13444,9000009])
date_convert(dates)
#returns:
#array([datetime.datetime(1969, 12, 31, 20, 44, 4),
# datetime.datetime(1970, 4, 14, 21, 0, 9)], dtype=object)