为啥 pd.unique() 比 np.unique() 快?
Posted
技术标签:
【中文标题】为啥 pd.unique() 比 np.unique() 快?【英文标题】:Why is pd.unique() faster than np.unique()?为什么 pd.unique() 比 np.unique() 快? 【发布时间】:2019-04-18 00:43:18 【问题描述】:我试着比较了两个,一个是pandas.unique()
,另一个是numpy.unique()
,我发现后者实际上超过了第一个。
我不确定阁下是不是线性的。
关于代码实现,谁能告诉我为什么存在这样的差异?在什么情况下我应该使用哪个?
【问题讨论】:
没有直接的答案——从来没有深入挖掘过,但 Pandas 在文档本身中称其为.unique()
的速度。 pandas.pydata.org/pandas-docs/version/0.23.4/generated/…
unique
没有特别使用 numpy 多维性。这是一种与求和和乘法截然不同的运算。它对一维数组进行排序,然后查找相邻的重复项。 np.lib.arraysetops._unique1d
此外,np.unique 比 pandas 独特的功能要多得多。比如返回找到它们的位置的索引、重建原始数组的能力以及找到的唯一值的计数。
@hpaulj - 根据@dozyaustin 指出的文档,pandas
unique()
的速度与排序无关(这将需要大量额外的内存和时间;关于访问第一个独特的元素)。相反,该操作使用 hashmap 来跟踪迭代器在其过程中通过数据帧访问过的元素。
【参考方案1】:
np.unique() 将数据视为一个数组,因此它单独遍历每个值,然后识别唯一字段。
然而,pandas 具有包含此信息的预构建元数据,而 pd.unique() 只是调用包含“唯一”信息的元数据,因此不必再次计算它。
【讨论】:
以上是关于为啥 pd.unique() 比 np.unique() 快?的主要内容,如果未能解决你的问题,请参考以下文章