gpt4 book ai didi

python - 非数字数据的 numpy vs 列表

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:25 24 4
gpt4 key购买 nike

用于数值数据的 Numpy 数组显然工作得很好,但将它们用于非数值数据是否会更慢?

例如,假设我有一些嵌套的文本数据列表:

mammals = ['dog', 'cat', 'rat']
birds = ['stork', 'robin', 'penguin']

animals1 = [mammals, birds]

当访问和操作这些数据时,这个嵌套列表列表是否会比 numpy 数组等价物更快?

import numpy as np
animals2 = np.array(animals1)

由于 numpy 数组是作为每个元素具有固定长度的“跨步”数组实现的,因此如果转换为 numpy 数组,具有一些长字符串的“稀疏”字符串列表将占用不成比例的内存量。但是速度呢?

最佳答案

正如@JoshAdel 所指出的,您应该熟悉 timeit module .我相信你问的是这个比较:

>>> import timeit
>>> timeit.timeit('[[x.upper() for x in y] * 10000 for y in animals1]', setup="mammals = ['dog', 'cat', 'rat']\nbirds = ['stork', 'robin', 'penguin']\nanimals1 = [mammals, birds]", number=10000)
1.7549941045438686
>>> timeit.timeit("numpy.char.upper(animals2)", setup="import numpy\nmammals = ['dog', 'cat', 'rat']\nbirds = ['stork', 'robin', 'penguin']\nanimals1 = [mammals, birds] * 10000\nanimals2=numpy.array(animals1)", number=10000)
221.09816223832195

我根据您的评论更新了测试。这个问题很好,但您可能只需要用 numpy.char 尝试一些其他操作来弄清楚它是如何执行的。源文件指向一个带有_vec_string函数的.pyd(dll类型)文件。

很明显,上面这两个 cod 片段之间存在差异,numpy 执行 numpy.char.upper() 操作的时间比 python 执行 的时间长 100 多倍.upper() 字符串方法。

timeit 对于像这样的小代码片段来说使用起来非常简单。

关于python - 非数字数据的 numpy vs 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20941925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com