mor*_*ens 3 python arrays numpy
我正在尝试通过使用 numpy 数组删除 for 循环和列表理解来优化我的代码。总的来说,现在代码的执行速度更快了,但是有一件事情让我很困扰:将我的包含大约 110000 个元素的列表转换为 numpy 数组需要程序运行时的大部分时间(5 到 7 秒,只是为了初始化一个数组!)
我有这个
rec = np.array(records)
Run Code Online (Sandbox Code Playgroud)
哪里records是对象列表。
是否可以加快创建这个 numpy 数组的速度?
如果您的列表是一维的,则使用np.fromiter()比典型的np.array(). 大小为 10000 的整数列表的基准测试:
a = [1,2,3,4,5,6,7,8,9,10]*1000
%timeit np.array(a,dtype=np.int32)
456 µs ± 7.16 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit np.fromiter(a,dtype=np.int32,count=10000)
242 µs ± 6.65 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Run Code Online (Sandbox Code Playgroud)
python 存储对象(例如记录中的项目)的方式与 numpy 不同。因此,为了创建 numpy 数组,需要访问每个元素,然后进行转换。
正如 @anmol_uppoal 的评论所暗示的那样,您应该从一开始就创建一个 numpy 数组。例如
rec = np.zeros((SIZE_OF_ARRAY,))
# Set values of rec in the same way you created records, for instance
for i in range(100):
rec[i] = i+1
Run Code Online (Sandbox Code Playgroud)
获得进一步的优化将与数据的来源相关联——如果来自文件,请尝试以 numpy 格式而不是文本格式存储。如果是数据库,请考虑保存二进制值(但这在很大程度上取决于应用程序的其余部分)
| 归档时间: |
|
| 查看次数: |
4953 次 |
| 最近记录: |