python - 如何将 numpy 数据预加载到像 io.BytesIO 这样的缓冲区中以使其可搜索?

标签 python numpy pytorch torch bytesio

以下函数基本上返回numpy.ndarray

def getimage(id):
     img = self.coco.loadImgs(id)
     I = io.imread(img['coco_url'])
     return I #returns 'numpy.ndarray'     

从 main 调用的 getimage 函数:

x = load.getimage(id).
x = torch.load(x)

抛出错误:

'numpy.ndarray' object has no attribute 'seek'. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it instead.

最佳答案

使用 torch.as_tensor 代替 torch.load,您将不必创建缓冲区。

参见 this questionthis answer .

如果您希望 pytorch 张量成为您的 numpy 数组的副本,请使用 torch.tensor(arr)。如果你想让 torch.Tensor 共享同一个内存缓冲区,那么使用 torch.as_tensor(arr)。如果可以,PyTorch 将重用缓冲区。

如果你真的想从你的 numpy 数组中创建一个缓冲区,请使用 io 中的 BytesIO 类并使用 arr.tobytes() 对其进行初始化,例如 stream = io.BytesIO(arr.tobytes ())。不过,YMMV;我刚刚尝试使用 torch.load 中的流对象和 torch 提示:

import io

import numpy as np

a = np.array([3, 4, 5])
stream = io.BytesIO(a.tobytes())  # implements seek()
torch.load(stream)

---------------------------------------------------------------------------
UnpicklingError                           Traceback (most recent call last)
...
UnpicklingError: invalid load key, '\x03'.

如果你想让它工作,你可能必须调整 numpy 生成的字节流。祝你好运。

关于python - 如何将 numpy 数据预加载到像 io.BytesIO 这样的缓冲区中以使其可搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54058716/

相关文章:

python - 将 numpy 一维数组转换为邻接矩阵

python - 当工作人员数量增加并且 numpy 生成大型数组时,Keras 使用较少的 CPU

python - 如何有效地将 NaN 放入 Pandas Dataframe 中?

dataset - 如何在 Pytorch 中创建类似 MNIST 的数据集?

python - PyTorch:将向量的所有元素归零,除了前 k 个?

python - 给定同样的一段代码,为什么 python 版本比 C 慢 100x+?

python - 将多组子图拟合到一个图中

python - django.db.utils.OperationalError : my_table has no column id error?

python - 如何对一级索引进行分组并将函数应用于 Pandas 中的二级索引

python - 是否有可能使 cuda 具有确定性?