为什么pd.unique()比np.unique()更快?

时间:2018-11-14 23:57:31

标签: python pandas numpy data-science data-analysis

我试图比较两者,一个是pandas.unique(),另一个是numpy.unique(),我发现后者实际上超过了第一个。
我不确定是否是线性的。

有人可以告诉我为什么在代码实现方面存在这种差异吗?在什么情况下应该使用哪种?

谢谢。我是Stackoverflow的新手,对不起,如果我问得太多。

2 个答案:

答案 0 :(得分:0)

np.unique()将数据视为数组,因此它会分别遍历每个值,然后标识唯一字段。

而pandas已预先构建了包含此信息的元数据,而pd.unique()只是调用包含“独特”信息的元数据,因此不必再次计算。

答案 1 :(得分:-1)

很难说没有详细检查代码,但我怀疑这是由于pandas的矢量化性质和Numpy的数组方向所致。

pandasSeries中组织数据,这可能有助于缓存局部性并简化对唯一值的搜索。此外,pandas中的操作是根据需要执行的,这意味着您可以迭代到所讨论的Series的唯一值。这样的操作通常不需要额外的内存(或至少不需要太多)。

我不知道Numpy中有任何此类优化。对于数组来说,要困难得多。但是,我并不感到惊讶-Numpy有时效率很低,并且pandas不断得到改进。

此外,pandas似乎更适合于大数据处理,而Numpy则适合于较小规模的数字运算。