小U的矩阵转置计算| 豆包MarsCode AI 刷题

98 阅读2分钟

问题描述

小U拿到一个大小为 n × n 的矩阵。她需要计算该矩阵的转置权值。转置权值的定义如下:

  1. 将矩阵进行转置操作,转置后的矩阵中的元素 b[i][j] 与原矩阵中的元素 a[j][i] 互换位置。
  2. 对于每个位置 (i, j),计算原矩阵的元素与转置矩阵对应位置元素的差的绝对值。
  3. 最后,将所有差的绝对值累加起来,得出转置权值。

测试样例

样例1:

输入:n = 2, a = [[1, 2], [3, 4]]
输出:2

样例2:

输入:n = 3, a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
输出:16

样例3:

输入:n = 4, a = [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]
输出:20

问题理解

你需要计算一个 n × n 矩阵的转置权值。转置权值的定义如下:

  1. 转置操作:将矩阵的行和列互换,即原矩阵中的元素 a[i][j] 变为转置矩阵中的元素 b[j][i]
  2. 差的绝对值:对于每个位置 (i, j),计算原矩阵 a 中的元素与转置矩阵 b 中对应位置元素的差的绝对值。
  3. 累加:将所有差的绝对值累加起来,得到转置权值。

思路分析

  1. 创建一个大小为 n × n 的二维列表(矩阵)b,并将其所有元素初始化为 0
b = [[0] * n for _ in range(n)]
  • 计算原矩阵与转置矩阵对应位置元素的差的绝对值并存放到矩阵b对应位置。

在 Python 中,你可以使用 abs() 函数来计算两个数的差的绝对值.

for i in range(n):
        for j in range(n):
            b[i][j]=abs(a[i][j]-a[j][i])
  1. 将矩阵b中所有元素加起来就能够得到转置权值。

python代码展示

def solution(n: int, a: list) -> int:
    sum=0
    b = [[0] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            b[i][j]=abs(a[i][j]-a[j][i])
            sum+=b[i][j]
    return sum

示例分析

样例:

输入:n = 2, a = [[1, 2], [3, 4]]
输出:2

  1. 转置矩阵

    • 原矩阵 a 是:[ [1, 2],[3, 4] ]
    • 转置矩阵 a' 应该是:[ [1, 3],[2, 4] ]
  2. 计算差的绝对值并累加

    • 计算每个位置 (i, j) 上 a[i][j] 和 a'[i][j] 的差的绝对值

      |a[0][0] - a'[0][0]| = |1 - 1| = 0

      |a[0][1] - a'[0][1]| = |2 - 3| = 1

      |a[1][0] - a'[1][0]| = |3 - 2| = 1

      |a[1][1] - a'[1][1]|  = |4 - 4| = 0

    • 将所有差的绝对值累加起来:0 + 1 + 1 + 0 = 2

结论

我们需要了解什么矩阵转置,矩阵转置是怎样完成的;掌握python中基础函数知识,知道在 Python 中,可以使用 abs() 函数来计算两个数的差的绝对值。