0

给定一个数值二进制文件,我可以使用numpy.fromfile(). 这为数据分配了一个新数组。假设我已经有一个数组a,我想读入这个数组。我不得不做类似的事情

import numpy as np

size       = 1_000_000_000
size_chunk = 1_000_000
a = np.empty(size, dtype=np.double)
with open('filename', 'rb') as f:
    tmp = np.fromfile(f, dtype=np.double, count=size_chunk)
a[:size_chunk] = tmp

在哪里使事情一般a比读入的数据大tmp。我想避免tmp直接读入a. 请注意,虽然

a[:size_chunk] = np.fromfile(f, dtype=np.double, count=size_chunk)

隐藏tmp变量,不必要的临时内存还在。

我想像

np.fromfile(f, dtype=np.double, count=size_chunk, into=a[:chunk_size])

虽然没有into实现这样的关键字。

我怎样才能做到这一点?我也愿意使用 SciPy 或其他 Python 包。我会注意到 H5Py 包有一个read_direct()我想要的,除了我的数据文件是原始二进制文件而不是 HDF5 格式。

4

1 回答 1

0

我正在阅读有关缓冲区协议的内容,其中提到了 readinto;对于这类问题,有几个关于 SO 的问题,例如1,其中一些建议使用readinto


原始答案:虽然这应该可以通过自定义 C 扩展来实现,但这也是一种矫枉过正。

我认为单独使用 numpy 是不可能的,您必须自己进行 C 扩展。我已经查看了numpy 参考,所以我可能错过了一些东西,但是按照设计,python 会为你的缓冲区分配内存,如果 numpy 开发人员尊重这个设计选择,那么除了编写你自己的 C 扩展来支持这一点外,别无他法案子。

于 2021-01-25T16:00:51.307 回答