0

我无法理解这段代码。此函数确定矩阵中选定区域的总和。您将获得矩形左上角 (A) 和右下角 (D) 的矩阵和坐标。

    def matrixRegionSum(matrix, A, D):
      if len(matrix) == 0:
        return
      totalSum = 0
      for i in range(A[0], D[0] + 1):
        for j in range (A[1], D[1] + 1):
          totalSum += matrix[i][j]
      return totalSum

我坚持的部分在 range() 函数内。我不确定 A[0]、B[0]、A[1] 和 B[1] 如何访问矩阵。有人可以解释一下吗?我将 A[0] 视为数组中的第一个值,但矩阵是二维的。有人可以向我解释这个功能背后的逻辑吗?

感谢您的帮助!非常感激!

4

2 回答 2

2

Range 是迭代序列(低,高)的函数,不包括“高”元素。

如果您确实需要遍历一系列数字,内置函数 range() 会派上用场。它生成包含算术级数的列表,例如:

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(5, 10)
>[5, 6, 7, 8, 9]


因此,当您说 range(A[0],D[0]+1) 时,下限本质上是 A[0] 而上限本质上是 D[0]。所以进入逻辑,它的简单数学。

面积 = 整数 ydx。


A[0] 和 D[0] 分别是左上角和右下角坐标的 x 坐标。
A[1] 和 D[1] 是 y 坐标。因此,您正在沿着由 (D[1]+1 到 A[1]) 表示的条带迭代矩阵从 D[0]+1 到 A[0](即 dx),计算结果为 y。


因此,对于范围 A[0] 和 D[0] 中的特定 x,通过将 j 从 D[1]+1 循环到 A[1],通过对矩阵 (x, j) 中的元素求和来计算高度。
并且对于范围(A[0],D[0]+1)内的每个 x,此高度会重复添加到总和中。

实际上,您实际上是在使用由 A[0] 到 D[0] 为 x 和 A[1] 到 D[1] 为 y 指定的范围内的坐标来遍历矩阵中的索引。

例如:
如果 A=(0,6) 和 D=(3,8),
则循环计算为,

for i in range(0,4):
    for j in range(6,9):
         totalSum+=matrix[i][j]

希望这有帮助。

于 2013-08-07T08:15:20.103 回答
1

A表示左上角的坐标。A[0]是X坐标,A[1]Y坐标...

因此,range(A[0], D[0] + 1)在左边界和右边界之间的所有 X 值上循环。

Y轴的类似推理。

于 2013-08-07T08:55:59.517 回答