open3d.core.Tensor
是 Open3D 中定义的高维张量类。本文档将介绍 open3d.core.Tensor
的基本功能和操作。
Open3D 的张量可以使用以下方式创建:
import open3d.core as o3c
t1 = o3c.Tensor([[1, 2], [3, 4]]) # 创建2x2的张量
t2 = o3c.Tensor.ones((3, 4)) # 创建3x4的全1张量
t3 = o3c.Tensor.zeros((2, 3, 4)) # 创建2x3x4的全0张量
张量的属性包括 shape
、 dtype
和 device
。shape
表示张量的形状, dtype
表示张量的数据类型, device
表示张量存储的设备。
t = o3c.Tensor.ones((2, 3))
print(t.shape) # 输出 (2, 3)
print(t.dtype) # 输出 float32
print(t.device) # 输出 cpu:0
Open3D 支持多种数学运算,包括数学操作(如加、减、乘、除等)和比较操作(如大于、小于等)。以下为一些示例:
t1 = o3c.Tensor([[1, 2], [3, 4]])
t2 = o3c.Tensor.ones((2, 2))
# 加、减、乘、除
print(t1 + t2) # 输出 [[ 2., 3.], [ 4., 5.]]
print(t1 - t2) # 输出 [[0., 1.], [2., 3.]]
print(t1 * t2) # 输出 [[1., 2.], [3., 4.]]
print(t1 / t2) # 输出 [[1., 2.], [3., 4.]]
# 大于、小于
print(t1 > t2) # 输出 [[False, True], [True, True]]
print(t1 < t2) # 输出 [[True, False], [False, False]]
Open3D 也支持多种张量操作。
可以使用 reshape
操作改变张量的形状。
t = o3c.Tensor.ones((2, 3, 4))
t2 = t.reshape((3, 8)) # 变换为3x8的张量
print(t2.shape) # 输出 (3, 8)
使用 transpose
和 matmul
进行矩阵操作。以下示例展示了如何计算两个张量的矩阵乘积:
t1 = o3c.Tensor([[1, 2], [3, 4]]) # 2x2的矩阵
t2 = o3c.Tensor([[5, 6], [7, 8]]) # 2x2的矩阵
t3 = o3c.matmul(t1, t2) # 计算乘积
print(t3) # 输出 [[19., 22.], [43., 50.]]
Open3D 支持广播操作。在广播操作中,如果两个张量的形状在某一维度上不相同,则可以通过自动地复制其中一个张量来使它们具有相同的形状。以下是一个示例:
t1 = o3c.Tensor.ones((2, 3))
t2 = o3c.Tensor([1, 2, 3])
t3 = t1 + t2 # t2被扩展为(2, 3)的张量
print(t3) # 输出 [[2., 3., 4.], [2., 3., 4.]]