📅  最后修改于: 2023-12-03 15:33:14.313000             🧑  作者: Mango
numpy.triu
函数返回给定矩阵的上三角部分,其余部分被截断为零。它可以用于提取矩阵的上三角部分,也可以在矩阵计算中起到简化计算的作用。
numpy.triu(m, k=0)
:
m
:输入的矩阵k
:对角线的偏移量。0表示主对角线,正数表示上方的对角线,负数表示下方的对角线。import numpy as np
# 创建一个 4x4 的矩阵
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
# 提取矩阵的上三角部分
b = np.triu(a)
print(b) # 输出:[[ 1 2 3 4]
# [ 0 6 7 8]
# [ 0 0 11 12]
# [ 0 0 0 16]]
当计算复杂的矩阵问题时,仅需要关注矩阵的上三角部分,可以用 triu 函数提取出上三角部分进行计算,然后将结果传递给 NumPy 中的 tril 函数计算下三角部分,最后将结果相加得到完整的结果。
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 计算上三角部分
b = np.triu(a)
c = np.array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
# 计算下三角部分
d = np.tril(a)
# 计算完整矩阵
result = b.dot(c).dot(d)
print(result) # 输出:[[28, 40, 36],
# [49, 70, 66],
# [70, 100, 96]]
在稀疏矩阵的处理中,往往需要仅仅关注矩阵的上三角部分,可以使用 triu 函数提取出上三角部分对其进行处理,从而避免对整个矩阵进行计算的效率低下问题。
import numpy as np
a = np.array([[1, 2, 3, 0, 0],
[4, 5, 0, 6, 0],
[7, 0, 8, 9, 0],
[0, 0, 10, 11, 12],
[0, 0, 0, 13, 14]])
# 提取矩阵的上三角部分
b = np.triu(a)
# 输出稀疏矩阵的行列位置及其值
rows, cols = b.nonzero()
for i, j in zip(rows, cols):
print(f"{i}, {j}: {b[i][j]}")
# 输出:
# 0, 0: 1
# 0, 1: 2
# 0, 2: 3
# 1, 3: 6
# 2, 2: 8
# 2, 3: 9
# 3, 2: 10
# 3, 3: 11
# 3, 4: 12
# 4, 3: 13
# 4, 4: 14