栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将一系列int转换为字符串-为什么应用比astype快得多?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将一系列int转换为字符串-为什么应用比astype快得多?

性能

值得一开始,因为任何调查,与流行的观点之前看实际表现,

list(map(str, x))
似乎是
x.apply(str)

import pandas as pd, numpy as np### Versions: Pandas 0.20.3, Numpy 1.13.1, Python 3.6.2 ###x = pd.Series(np.random.randint(0, 100, 100000))%timeit x.apply(str)          # 42ms   (1)%timeit x.map(str) # 42ms   (2)%timeit x.astype(str)         # 559ms  (3)%timeit [str(i) for i in x]   # 566ms  (4)%timeit list(map(str, x))     # 536ms  (5)%timeit x.values.astype(str)  # 25ms   (6)

值得注意的一点:

  1. (5)比(3)/(4)快一点,随着更多的工作移到C中[我们假设不
    lambda
    使用任何功能] ,我们期望。
  2. (6)是迄今为止最快的。
  3. (1)/(2)相似。
  4. (3)/(4)相似。

为什么x.map / x.apply快速?

似乎是 因为它使用了快速编译的Cython代码:

cpdef ndarray[object] astype_str(ndarray arr):    cdef:        Py_ssize_t i, n = arr.size        ndarray[object] result = np.empty(n, dtype=object)    for i in range(n):        # we can use the unsafe version because we know `result` is mutable        # since it was created from `np.empty`        util.set_value_at_unsafe(result, i, str(arr[i]))    return result

为什么x.astype(str)慢?

熊猫适用

str
于该系列中的每个项目,而不使用上述Cython。

因此,性能可与

[str(i) for i in x]
/相媲美
list(map(str, x))

为什么x.values.astype(str)这么快?

Numpy不会在数组的每个元素上应用函数。我发现了对此的一种描述:

如果您做

s.values.astype(str)
了,您将得到一个持有的对象
int
。这是
numpy
在进行转换,而熊猫会遍历每个项目并调用
str(item)
它。因此,如果您
s.astype(str)
拥有对象持有权
str

有一个技术原因,在没有空值的情况下,尚未实现numpy版本。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号