首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Numpy数组与Python数组

Numpy数组与Python数组
EN

Stack Overflow用户
提问于 2018-07-12 00:59:47
回答 3查看 2.6K关注 0票数 7

我注意到Python中数组操作的事实标准是通过优秀的numpy库实现的。然而,我知道Python Standard Library有一个array模块,在我看来,它的用例与Numpy相似。

是否有任何实际的示例表明,相对于numpy list**?**或普通list**?**,更适合使用

根据我天真的解释,array只是同构数据的内存高效容器,但没有提供提高计算效率的方法。

编辑

出于好奇,我在Github和import array上搜索Python点击了186'721次,而import numpy点击了8'062'678次。

但是,我找不到使用array的流行存储库。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-12 03:52:53

为了理解numpyarray之间的区别,我又做了一些定量测试。

我发现,对于我的系统(Ubuntu18.04,Python3),与numpy相比,arrayrange生成器生成大型数组的速度似乎快了一倍(尽管numpy的专用np.arange()似乎快得多--实际上太快了,而且可能在测试期间缓存了一些东西),但比使用list慢两倍。

然而,令人惊讶的是,array对象似乎比numpy的对等物要大。相反,list对象大约比array对象大8-13% (显然,这将随单个项目的大小而变化)。与list相比,array提供了一种控制number对象大小的方法。

因此,当numpy不可用时,可能是array唯一合理的用例。

为了完整起见,下面是我用于测试的代码:

代码语言:javascript
复制
import numpy as np
import array
import sys

num = int(1e6)
num_i = 100
x = np.logspace(1, int(np.log10(num)), num_i).astype(int)

%timeit list(range(num))
# 10 loops, best of 3: 32.8 ms per loop

%timeit array.array('l', range(num))
# 10 loops, best of 3: 86.3 ms per loop

%timeit np.array(range(num), dtype=np.int64)
# 10 loops, best of 3: 180 ms per loop

%timeit np.arange(num, dtype=np.int64)
# 1000 loops, best of 3: 809 µs per loop


y_list = np.array([sys.getsizeof(list(range(x_i))) for x_i in x])
y_array = np.array([sys.getsizeof(array.array('l', range(x_i))) for x_i in x])
y_np = np.array([sys.getsizeof(np.array(range(x_i), dtype=np.int64)) for x_i in x])

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))
plt.plot(x, y_list, label='list')
plt.plot(x, y_array, label='array')
plt.plot(x, y_np, label='numpy')
plt.legend()
plt.show()

票数 8
EN

Stack Overflow用户

发布于 2018-07-12 01:01:50

是的,如果你不想在你的代码中有另一个依赖的话。

票数 1
EN

Stack Overflow用户

发布于 2018-07-12 04:56:50

你的意思是2018年或2002年的真实世界的例子?NumPy最初是作为Python的一个扩展,而不是作为核心库的一部分。因此,这就是为什么它是这样的,而不是因为任何性能权衡。

https://scipy.github.io/old-wiki/pages/History_of_SciPy.html

你似乎在问一个更一般的问题的特定版本。也许如果你从更广泛的角度考虑,你会发现你的问题可能没有多大用处。存在特定的模块来提供核心语言中没有的功能。如果它们更优化,拥有更多功能,或者即使它们被更多地使用,也不会令人惊讶。

这并不意味着你必须使用它们,也不意味着把它们留在里面也不是什么大问题。

我想我不明白你为什么要问这个问题,它会帮助我们给你提供一个更好的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51290791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档