【问题标题】:Comparing two methods for writing a numpy array to disk比较将 numpy 数组写入磁盘的两种方法
【发布时间】:2014-04-18 01:05:20
【问题描述】:

我比较了将numpy array 写入原始二进制文件的两种简单方法:

# 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)

使用第二种方法,内存使用量加倍(此处为 4 GB)!

为什么 .tostring() 经常用于将 numpy 数组写入文件? (在http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tofile.html中说明numpy.ndarray.tofile()可能等价于file.write(a.tostring())

将这样的数组写入磁盘时,方法 1 是否与方法 2 一样正确?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    文档并没有说.tofile() 等价于file.write(a.tostring()),它只是提到后者来解释如果参数sep 的值为"" 将如何表现。

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

    你也应该看看:

    np.savetxt()
    

    【讨论】:

    • 感谢您的回答。但是 为什么 .tostring() 经常用于将 numpy 数组写入文件?见docs.scipy.org/doc/numpy/reference/generated/…numpy.ndarray.tofile()可以等价于file.write(a.tostring()...为什么numpy.ndarray.tofile()不使用file.write(a)
    • @Basj 但文档并没有说.tofile() 等同于file.write(a.tostring()),它只提到后者来解释分隔符"" 的行为方式
    • 好的,但为什么没有提到:file.write(a)
    • @Basj 现在你明白了一个重点。您或许应该建议 DEV 团队更改这部分文档,以便以更高效的代码为例...
    • 方法 1(在我的问题中)是否与将此类数组写入磁盘的方法 2 一样正确? (我在主题中添加了这个问题)
    猜你喜欢
    • 2015-07-04
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多