在 Open3D 中,open3d.core.Tensor.contiguous
方法可用于返回一个新的张量,以表示具有相同数据元素的连续内存块。当输入张量(或者它是从其他张量中选取的子集)在内存中不是块连续的时候,就会使用该方法进行操作。
举个例子,如果一个张量是在0号轴上连接了两个非连续块的话,就可以利用该方法获得一个新张量,其中所有数据将被重新组成一个连续内存块。
import open3d as o3d
import numpy as np
source = np.random.rand(3, 4, 5)
slice = source[:, :, 1:4:2] # 将第三个维度取每隔1个元素的子集
print(f"source.is_contiguous(): {o3d.core.Tensor.from_numpy(source).is_contiguous()}")
print(f"slice.is_contiguous(): {o3d.core.Tensor.from_numpy(slice).is_contiguous()}")
# 输出结果如下
# source.is_contiguous(): True
# slice.is_contiguous(): False
# 将 slice 重新变成连续的内存块
slice_contig = o3d.core.Tensor.from_numpy(slice).contiguous()
print(f"slice_contig.is_contiguous(): {slice_contig.is_contiguous()}")
# 输出结果如下
# slice_contig.is_contiguous(): True
open3d.core.Tensor.contiguous
方法将返回一个与输入张量具有相同形状的新张量,但是其数据元素将以一种连续的方式重新组织,并存储在一个内存块中。
该方法没有参数。
返回的张量将保证在内存中是块连续的,并与输入张量具有相同的形状。
该方法不会引发任何异常。