首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在包含`datetime` (Python / Numpy)的对象列表上使用`np.unique`时,获取了一个`TypeError`

问在包含`datetime` (Python / Numpy)的对象列表上使用`np.unique`时,获取了一个`TypeError`
EN

Stack Overflow用户
提问于 2019-11-02 00:02:19
回答 1查看 181关注 0票数 0

我试图在两个python对象之间使用np.setdiff1d,但无法管理。我发现不能对包含datetime的对象列表使用np.union!

要重现错误,请执行以下操作:

代码语言:javascript
复制
import numpy as np
from datetime import datetime

d = datetime.now()
a = [(1, d), (2, d), (3, d), (3, d)]
np.unique(a)

这会抛出以下错误:

代码语言:javascript
复制
  File "<ipython>", line 6, in <module>
    np.unique(a)
  File "/usr/local/lib/python3.6/dist-packages/numpy/lib/arraysetops.py", line 264, in unique
    ret = _unique1d(ar, return_index, return_inverse, return_counts)
  File "/usr/local/lib/python3.6/dist-packages/numpy/lib/arraysetops.py", line 312, in _unique1d
    ar.sort()
TypeError: '<' not supported between instances of 'datetime.datetime' and 'int'

是numpy的bug吗?你知道有没有其他方法来解决我正在尝试做的事情(最初愿意使用np.setdiff1d between 2 lists of a similar structure)?

提前说,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-11-02 00:16:30

原因如下:numpy.unique将首先展平数组。从文档中:

输入数组。除非指定了axis,否则如果它还不是1-D,它将被展平。

因此,您必须考虑希望元素沿着哪个轴是唯一的(对于NumPy,您的元组列表将看起来像一个2D数组);然后使用正确的axis关键字值。不幸的是,您很快就会发现这也行不通,因为元素被视为一个对象(因为NumPy试图将整数和日期时间混合到一个对象类型中),这在NumPy中是不允许比较的。

但是由于您使用的是元组列表(那里没有NumPy ),所以只需使用set()

代码语言:javascript
复制
>>> from datetime import datetime
>>>
>>> d = datetime.now()
>>> a = [(1, d), (2, d), (3, d), (3, d)]
>>> set(a)
{(2, datetime.datetime(2019, 11, 1, 17, 15, 38, 578611)), (1, datetime.datetime(2019, 11, 1, 17, 15, 38, 578611)), (3, datetime.datetime(2019, 11, 1, 17, 15, 38, 578611))}

请注意,集合自然是无序的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58662301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档