open3d.core.Tensor
对象是Open3D中最为重要的数据类型之一。它在处理三维几何相关任务时起着关键作用。Tensor
包含了一组数字,这些数字可以是实数,也可以是整数,具体取决于用户的需求。在Open3D中,Tensor
可以在不同的设备上运行,device
用于标识计算所在的设备。
创建一个Tensor
时,用户需要指定其device
。device
的具体取值如下所示:
device('CPU:0')
:在CPU上创建Tensor
。device('CUDA:0')
:在第一个GPU上创建Tensor
。device('CUDA:1')
:在第二个GPU上创建Tensor
。device('OPENGL:0')
:在OpenGL上创建Tensor
。device('VULKAN:0')
:在Vulkan上创建Tensor
。代码示例
import open3d as o3d
import numpy as np
# 创建一个CPU上的Tensor
tensor_cpu = o3d.core.Tensor([1, 2], o3d.core.Device('CPU:0'))
print(f'tensor_cpu: {tensor_cpu}')
# 创建一个第一个GPU上的Tensor
tensor_gpu0 = o3d.core.Tensor(np.array([1., 2.]), o3d.core.Device('CUDA:0'))
print(f'tensor_gpu0: {tensor_gpu0}')
用户可以使用Tensor.device
属性获取Tensor
所在的设备。该属性返回一个open3d.core.Device
对象。
代码示例
import open3d as o3d
import numpy as np
# 创建一个第一个GPU上的Tensor
tensor_gpu0 = o3d.core.Tensor(np.array([1., 2.]), o3d.core.Device('CUDA:0'))
# 获取Tensor所在的Device
device = tensor_gpu0.device
print(f'tensor_gpu0 is on {device}')
在Open3D中,用户可以将一个Tensor
复制到不同的设备中。为了实现这一点,用户需要使用Tensor.to_device()
方法将Tensor
复制到目标设备。该方法的参数为目标设备的Device
对象。
代码示例
import open3d as o3d
import numpy as np
# 创建一个第一个GPU上的Tensor
tensor_gpu0 = o3d.core.Tensor(np.array([1., 2.]), o3d.core.Device('CUDA:0'))
# 将Tensor复制到第二个GPU上
tensor_gpu1 = tensor_gpu0.to_device(o3d.core.Device('CUDA:1'))
print(f'tensor_gpu1: {tensor_gpu1}')
Tensor
都放在相同的设备上。Tensor
都在相同的设备上。with o3d.core.DeviceScope
语句明确地指定使用的设备。代码示例
import open3d as o3d
import numpy as np
# 这里将创建的Tensor放在CPU上,但是在执行函数make_pointcloud时,会使用GPU隐式地运算
device = o3d.core.Device('CPU:0')
tensor_cpu = o3d.core.Tensor(np.array([1., 2.]), device)
pcd = o3d.geometry.PointCloud()
# 这里需要在语句中显式地指定只在CPU上运算
with o3d.core.DeviceScope(device):
# 这里运算过程会在CPU上进行,不受隐式调用的GPU干扰
pcd.points = o3d.utility.Vector3dVector(np.array([[-1, 0, 0],[1, 0, 0],[0, 1, 0],[0, 0, 1]], dtype='float32'))
print(pcd)