我正在尝试将日期时间数组与单个日期时间进行比较
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/github.min.css" />
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.0.0-alpha14/js/tempusdominus-bootstrap-4.min.js"></script>
<link rel="stylesheet" href="https://tempusdominus.github.io/bootstrap-4/theme/css/tempusdominus-bootstrap-4.css" />
<div class="container">
<div class="row">
<div class="col-sm-6">
<input type="text" class="form-control datetimepicker-input" id="datetimepicker5" data-toggle="datetimepicker" data-target="#datetimepicker5" />
</div>
<script type="text/javascript">
$(function() {
$('#datetimepicker5').datetimepicker();
});
</script>
</div>
</div>
这给我一个错误。
tt = np.array([['1993-09-01T00:00:00.000000000',
'2005-12-01T00:00:00.000000000'],
['1992-07-01T00:00:00.000000000',
'2009-05-01T00:00:00.000000000']], dtype='datetime64[ns]')
tt > dt.datetime(2001,1,1)
我可以知道如何将日期时间数组与单个日期时间进行比较吗?
我希望得到的结果是np.arrary([[False,True],[False,True]])
答案 0 :(得分:0)
原因是datetime对象与numpy.datetime对象不同。因此,您要比较不同的对象,因此会出现错误。 请尝试以下代码:
tt = np.array([['1993-09-01T00:00:00.000000000',
'2005-12-01T00:00:00.000000000'],
['1992-07-01T00:00:00.000000000',
'2009-05-01T00:00:00.000000000']], dtype='datetime64')
tt > np.datetime64('2001-01-01')
您将获得理想的结果!
答案 1 :(得分:0)
当尝试将numpy对象与其他类型的对象进行比较时,numpy将尝试进行转换。在这里,目标是不属于numpy的Python对象,因此numpy会将numpy日期转换为Python对象。人们会期望最终的Python对象为datetime.datetime
,但是由于它不支持纳秒,因此numpy会将其转换为int
。
请参见numpy代码的相关部分。 https://github.com/numpy/numpy/blob/608329acac78b98e9c1044dca23a4f287d639b24/numpy/core/src/multiarray/datetime.c#L2847
例如,您可以尝试:
>>> np.array(['2009-05-01T00:00:00.000000000'], dtype='datetime64[ns]').tolist()
[1241136000000000000]
Python int
无法与datetime.datetime
进行比较,因此会出错。
但是,如果numpy日期时间可以表示为datetime.datetime
(如果其精度高于微秒且在有效日期时间范围内),则将其转换为datetime.datetime
而不是int
。尝试例如:
>>> np.array(['2009-05-01T00:00:00.000000000'], dtype='datetime64[us]').tolist()
[datetime.datetime(2009, 5, 1, 0, 0)]
因此,为了使您的示例正常工作,您可以将dtype
从datetime64[ns]
更改为datetime64[us]
,它的行为应与您预期的一样。
请注意,此行为与数组无关。
>>> np.datetime64('2009-05-01T00:00:00.000000000', 'ns') > dt.datetime(2001, 1, 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'int' and 'datetime.datetime'
>>> np.datetime64('2009-05-01T00:00:00.000000000', 'us') > dt.datetime(2001, 1, 1)
True