在Open3D的open3d.core.Tensor模块中,blob是指Tensor在内存中的表示形式,即一个连续的字节序列。一个blob中包含一个或多个Tensor,是Tensor读写操作的基础,同时也是在内存中保存数据的基本单位。
一个blob由下列部分组成:
Open3D中的blob有两种类型:
使用Open3D的Tensor创建函数可以创建一个blob对象。例如:
import open3d.core as o3c
data = [1,2,3,4,5,6,7,8]
tensor = o3c.Tensor(data, dtype=o3c.UInt8)
blob = o3c.core.Blob([tensor])
通过在创建时指定多个Tensor可以创建多Tensor的形式。
可以使用Blob对象的成员函数来访问它所包含的Tensor。例如,可以使用get_tensor函数获取blob中的Tensor:
tensor_1 = blob.get_tensor(0)
在多Tensor的情况下,可以使用Tensor描述符访问每个Tensor:
tensor_2 = blob.get_tensor(tensor_desciptor_2)
也可以使用实例化TensorSlice类获取特定区域中的Tensor:
indices = [[1, 0, 0, 1], [2, 2, 2, 2]]
tensor_slice = o3c.TensorSlice(blob.get_tensor_desc(), indices)
Blob的内存可以在拷贝时进行超额分配,以允许容易的调整大小。可以使用以下函数创建Blob的拷贝:
new_blob = blob.clone()
拷贝的数据块的大小仅仅足够容纳所有Tensor的实际值,并且,新的Blob包含着对数据块的唯一引用。这意味着任何改变新blob中任何Tensor的数据,都会改变原Blob。因此,在复制Blob的时候需要格外注意。