【发布时间】:2022-01-15 14:44:00
【问题描述】:
我写了一些代码
batch = np.ones([4, 3, 224, 224], dtype="float32")
import time
s = time.time()
batch_bytes = batch.tobytes()
e = time.time()
print(f"{(e-s)*1e3} ms")
这给出了2.2954940795898438 ms的输出
看起来成本不小,我猜这个方法是复制数据字节?
以前以为数据在内存中是以字节为单位存储的,所以有办法直接获取?
那么是否有可能更有效地获取字节?
【问题讨论】:
-
你希望用这些字节做什么?
-
@hpaulj 一种情况是我们将通过套接字将这些字节(用于序列化)发送到其他机器,我们只需要读取字节而无需再操作。在这种情况下,我们希望在没有复制的情况下有效地获得它。
-
可能会查找
memoryview -
memoryview提供像bytes_array[x:y]这样的对象的内部访问,这意味着我们仍然需要首先获取bytes?...除非我们可以从memoryview(ndarray_object)获取字节,否则@ 987654329@是否支持memoryview的缓冲协议? -
试试
data属性,它是memoryview。 stackoverflow.com/questions/69544408/…。我没有使用过memoryview,但已经看到了一些关于它的内容。
标签: numpy numpy-ndarray