如何将 numpy 数组写入字节内存流?

How to write a numpy array to a byte memorystream?

我在 Python2.7 中对通过 ndarray.tofile(fileHandle,..) 写入 numpy 数组的代码进行单元测试。由于多种原因,在单元测试中执行文件 IO 是不好的,我如何用字节内存流代替文件句柄? (io.BytesIO 无法工作,因为 ndarray.toFile() 要求它提供文件名。)

tempfile.TemporaryFile 适合您的目的吗?

它公开了与普通文件对象相同的接口,因此您可以将它直接传递给np.ndarray.tofile(),当它被显式关闭或被垃圾回收时,它会立即被删除:

import numpy as np
from tempfile import TemporaryFile

x = np.random.randn(1000)

with TemporaryFile() as t:
    x.tofile(t)
    # do your testing...

# t is closed and deleted

然而,它会暂时驻留在磁盘上(通常在 Linux 机器上的 /tmp/ 中),但我没有看到完全避免 I/O 的简单方法,因为 .tofile() 最终需要一个有效的 OS 级文件描述符。

不应该 tobytes [1] and frombuffer [2] 做你需要做的测试吗?

m = np.random.rand(5,3)
b = m.tobytes()
mb = np.frombuffer(b).reshape(m.shape)