创建numpy数组时在末尾添加了零项

2024-10-03 13:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

从下面的ipdb日志中可以看到,额外的零日期被添加到prepost数组中。 我怎样才能解决这个问题?为什么会这样

ipdb> pre
(datetime.datetime(2013, 12, 31, 9, 58), 0, 1)

ipdb> post
(datetime.datetime(2013, 12, 31, 13, 15), 0, 1)

ipdb> RDT
RDT = [(COL_TIME, 'M8[s]'), (COL_STATUS, 'b'), (COL_MOBILE, 'b')]

ipdb> RMATCH
RMATCH = [(COL_PRE, RDT), (COL_POST, RDT)]

ipdb> ppre, ppost = np.array(pre, dtype=RDT), np.array(post, dtype=RDT)

ipdb> ppre
array((datetime.datetime(2013, 12, 31, 9, 58), 0, 1), 
      dtype=[('TIME', '<M8[s]'), ('STATUS', 'i1'), ('MOBILE', 'i1')])

ipdb> np.array([ppre, ppost], dtype=RMATCH)
array([ ((datetime.datetime(2013, 12, 31, 9, 58), 0, 1), (datetime.datetime(1970, 1, 1, 0, 0), 0, 0)),
       ((datetime.datetime(2013, 12, 31, 13, 15), 0, 1), (datetime.datetime(1970, 1, 1, 0, 0), 0, 0))], 
      dtype=[('PRE', [('TIME', '<M8[s]'), ('STATUS', 'i1'), ('MOBILE', 'i1')]), ('POST', [('TIME', '<M8[s]'), ('STATUS', 'i1'), ('MOBILE', 'i1')])])

Tags: datetimetimestatuscolmobilepostarraypre
1条回答
网友
1楼 · 发布于 2024-10-03 13:26:39

最后一个结果是一个dtype RMATCH包含两个元素的数组ppreppost分别被转换成这个数据类型

如果希望数组包含单个元素,ppre填充RMATCH数据类型的第一个字段,ppost填充第二个字段,请尝试以下操作:

np.array([(ppre, ppost)], dtype=RMATCH)

(请注意附加的括号。)

我不确定这是一个bug、一个疣还是一个np.array([ppre, ppost], dtype=RMATCH)没有引起错误的特性,而是用0填充了未使用的字段

相关问题 更多 >