📜  numpy 中的 triu 函数 - Python (1)

📅  最后修改于: 2023-12-03 15:33:14.313000             🧑  作者: Mango

numpy 中的 triu 函数 - Python

简介:

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]]
应用:

1. 将矩阵的上三角部分与下三角部分分别进行计算

当计算复杂的矩阵问题时,仅需要关注矩阵的上三角部分,可以用 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]]

2. 高效处理稀疏矩阵

在稀疏矩阵的处理中,往往需要仅仅关注矩阵的上三角部分,可以使用 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