Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 巨型numpy阵列中元素的时间访问_Python_Arrays_Performance_Numpy_Large Data - Fatal编程技术网

Python 巨型numpy阵列中元素的时间访问

Python 巨型numpy阵列中元素的时间访问,python,arrays,performance,numpy,large-data,Python,Arrays,Performance,Numpy,Large Data,我想访问并使用一个巨大的numpy数组的列做一些基本的事情,非稀疏的,充满浮点,形状为200万x 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 但是,如果我创建一个包含800列的更大数组,那么对一列的访问时间就高得离谱: a = np.ones((2000000, 800)) # t

我想访问并使用一个巨大的numpy数组的列做一些基本的事情,非稀疏的,充满浮点,形状为200万x 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
但是,如果我创建一个包含800列的更大数组,那么对一列的访问时间就高得离谱:

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
所以我的问题是:你如何处理这种情况?是否有更好的对象来存储如此大的矩阵,并执行诸如log10、绘图等简单操作?或者我需要欺骗它,比如创建800个np.Array和shape(2000000,)?我已经快速阅读了关于Pytables和hdf的文章,但我不知道这些解决方案是否适合我的问题,乍一看,这看起来非常简单

非常感谢

编辑:我在xp 64位上,数组的数据类型是float64。 我用几种形状测试了这个专栏的访问时间,smth strange出现了:

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


时间访问大约有1050000行,因此我怀疑问题与64位机器上内存分配的最大位大小有关?

您的计算机实际有多少物理RAM?它有8个RAM,但我使用SSD进行交换,所以我可以轻松分配100 Go的RAM,而不会减慢PCUm。。。你认为SSD和RAM一样快吗?真的吗?是的,正如我在刚刚添加到文章中的编辑中提到的,行数稍微少一点,效果很好。我的电脑现在有100万条线路,为我剩余的时间分配了20 Go的RAMcode@RomainL:SSD的访问延迟比RAM慢几个数量级,同样,带宽也低几个数量级。仅仅因为SSD的延迟比HDD低并不意味着它的速度接近RAM。您的计算机实际有多少物理RAM?它有8个RAM,但我使用SSD进行交换,因此我可以轻松分配100个RAM,而不会降低PCUm的速度。。。你认为SSD和RAM一样快吗?真的吗?是的,正如我在刚刚添加到文章中的编辑中提到的,行数稍微少一点,效果很好。我的电脑现在有100万条线路,为我剩余的时间分配了20 Go的RAMcode@RomainL:SSD的访问延迟比RAM慢几个数量级,同样,带宽也低几个数量级。仅仅因为SSD的延迟比HDD低并不意味着它的速度接近RAM。
a = np.ones((1100000, 800), dtype="float64")  # just a few more column
b = np.log10(a[:, 0])  # 6 min 20 sec