triu
是 Open3D
的 open3d.core
模块下的函数,用于获取给定矩阵的上三角部分。对于一个 m*n
的矩阵 A
,其上三角部分是指矩阵中行列索引都满足 i<=j
的元素组成的子矩阵。 triu
函数返回的结果即为给定矩阵的上三角部分。
import open3d.core as o3c
up_triangular = o3c.triu(input, k=0)
input
:要获取上三角部分的矩阵,类型为 open3d.Tensor
。k
:非负整数,表示需要在矩阵上移动的对角线数。当 k>0
时,函数返回一个在主对角线之上的矩阵;当 k<0
时,函数返回一个在主对角线之下的矩阵。默认值为 0
。up_triangular
:open3d.Tensor
类型的矩阵,表示给定矩阵的上三角部分。import open3d.core as o3c
import numpy as np
# 构造一个 4*4 的矩阵
mat = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
input_tensor = o3c.Tensor(mat, dtype=o3c.float32, device=o3c.cpu)
# 获取矩阵的上三角部分
up_triangular = o3c.triu(input_tensor)
# 打印结果
print(up_triangular)
输出:
Tensor[shape={4,4}, dtype=Float32, device=CPU:0]
[[1. 2. 3. 4.]
[0. 6. 7. 8.]
[0. 0. 11. 12.]
[0. 0. 0. 16.]]
triu
函数不会修改原始矩阵,返回的上三角部分是一个新的矩阵。k>0
时,上三角部分会向主对角线之上移动 k
个位置,如果矩阵过小可能会出现越界访问问题。同样的,在 k<0
时也可能出现越界访问问题。up_triangular
是一个新的张量,可以进行内存共享。但是需要注意,修改这个张量中的数据也会影响到原来的张量。