巨大的numpy数组中元素的时间访问

时间:2016-08-23 12:16:38

标签: python arrays performance numpy large-data

我想访问并使用巨大的numpy数组的列来做一些基本的东西,非稀疏,充满浮动,形状为200万x 800。 所以基本上:

a == b

但如果我创建一个包含800列的更大数组,则对列的访问时间非常高:

import numpy as np
a = np.ones(2000000) # 2 millions elts

%timeit np.log10(a)
10 loops, best of 3: 28.8 ms per loop

所以我的问题是:你如何处理这种情况?是否有更好的对象来存储这样一个大矩阵并执行简单的操作,如log10,情节等?或者我需要欺骗它,比如创建800 np.arrays的形状(2000000,)?我很快就读到了关于Pytables和hdf的帖子,但是我不知道这些解决方案是否适合我的问题,这看起来很简单......

非常感谢!

编辑:我的xp是64位,数组的dtype是float64。 我用几种形状测试了这个列的访问时间,并且出现了一些奇怪的事情:

a = np.ones((2000000, 800))  # take 12 Go RAM
b = a[:, 0].copy()  # 6 mins

%timeit np.log10(b)
10 loops, best of 3: 31.4 ms per loop

a = np.ones((1000000, 800), dtype="float64")
%timeit np.log10(a[:, 0])
1 loops, best of 3: 150 ms per loop

对于大约1050000行的时间访问有一个阈值,所以我怀疑这个问题与64位机器上内存分配的最大位大小有关吗?

0 个答案:

没有答案