2014-03-13 24 views
1

两种方法我比较用于写入numpy array成原始二进制文件中的两个简单的方法:比较用于写入numpy的阵列到磁盘

# method 1 
import numpy 
A = numpy.random.randint(1000, size=512*1024*1024) # 2 GB 
with open('blah.bin', 'wb') as f: 
    f.write(A) 

# method 2 
import numpy 
A = numpy.random.randint(1000, size=512*1024*1024) # 2 GB 
raw_input() 
B = A.tostring()   # check memory usage of the current process here : 4 GB are used !! 
raw_input() 
with open('blah.bin', 'wb') as f: 
    f.write(B) 

在第二方法中,存储器用法是加倍(这里是4GB)!

为什么.tostring()经常用于写入numpy数组? (在http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tofile.html,解释了numpy.ndarray.tofile()可以等同于file.write(a.tostring())

是方法1作为方法2写入这样的阵列到磁盘正确?

回答

1

文档没有说.tofile()相当于file.write(a.tostring()),仅提及了后者的解释论据sep将如何表现,如果它的值是""

在第二种方法中,您正在创建数组A的副本,存储在B之后,然后在文件中写入,而在第一种方法中,避免了此中间副本。

你也应该有一个看看:

np.savetxt() 
+0

谢谢回答。但是,然后**为什么**是'.tostring()'经常用于写入numpy数组到文件?请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tofile.html:'numpy.ndarray.tofile()'可以等同于'file.write(a.tostring() '...为什么'numpy.ndarray.tofile()'使用'file.write(a)'? – Basj

+0

@Basj,但文档没有说'.tofile()'等同于'file.write (a.tostring())',它只提到后者来解释分隔符''''将如何表现 –

+0

好,但为什么不提到:'file.write(a)'? – Basj