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

是否有numpy库的O大复杂性列表?

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

是否有numpy库的O大复杂性列表?

BigO复杂度通常不用于Python和numpy。它衡量代码如何随问题大小扩展。这在像C这样的编译语言中很有用。但是这里的代码是解释性Python和编译后代码的混合。两者可以具有相同的bigO,但是解释版本将慢几个数量级。这就是为什么大多数SO有关提高numpy速度,谈论“删除循环”和“向量化”的问题。

也很少有运算是纯O(n);大多数是混合的。有安装成本,还有每件成本。如果单件成本很小,则安装成本将占主导地位。

如果从列表开始,则在列表上进行迭代通常会更快,因为将列表转换为数组会产生大量开销(O(n))。

如果您已经有数组,则请尽可能避免(python级)迭代。迭代是大多数计算的一部分,但是numpy可以让您在更快的编译代码(更快的O(n))中完成很多工作。

在某些时候,您必须了解numpy如何存储其数组。

view
和之间的区别
copy
很重要。视图实际上是O(1),副本是O(n)。

通常,您会看到SO答案可以进行

timeit
速度比较。我经常加警告,结果可能会因问题大小而异。更好的答案将解决各种尺寸问题,并在漂亮的图中显示结果。结果通常是直线(O(n))和曲线(O(1)和O(n)分量的混合)的混合。


您专门询问了有关

np.array
。以下是一些示例计时:

In [134]: %%timeit alist = list(range(1000))     ...: np.array(alist)67.9 µs ± 839 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)In [135]: %%timeit alist = list(range(10))     ...: np.array(alist)2.19 µs ± 9.88 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)In [136]: %%timeit alist = list(range(2000))     ...: np.array(alist)134 µs ± 1.98 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

复制一个数组:

In [137]: %%timeit alist = list(range(2000)); arr=np.array(alist)     ...: np.array(arr)1.77 µs ± 24.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

无副本:

In [138]: %%timeit alist = list(range(2000)); arr=np.array(alist)     ...: np.array(arr, copy=False) 237 ns ± 1.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

从字符串列表中:

In [139]: %%timeit alist = [str(i) for i in range(2000)]     ...: np.array(alist, dtype=int)286 µs ± 4.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

几乎所有的计算

numpy
都为O(n)。如果涉及数组的每个元素,则速度将取决于数组的大小。有些数组操作是O(1),例如重塑,因为它们实际上对数据不做任何事情;它们会改变形状和步幅等属性。

搜索问题的增长速度通常快于O(n);通常

numpy
不是解决此类问题的最佳选择。使用精明的Python列表和字典可以更快。



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

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

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