我无法理解这段代码。此函数确定矩阵中所选区域的总和。您将获得矩形的左上角(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]视为数组中的第一个值,但矩阵是2D。有人可以向我解释这个功能背后的逻辑吗?
谢谢你的帮助!非常感谢!
答案 0 :(得分:2)
范围是迭代序列(低,高)的函数 '高'元素。
如果你需要迭代一系列数字,内置函数range()会派上用场。它生成包含算术进度的列表,例如:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(5, 10)
>[5, 6, 7, 8, 9]
因此,当你说范围(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从D [1] +1循环到A [1],对矩阵(x,j)中的元素求和来计算高度。
并且对于范围(A [0],D [0] +1)中的每个x,将该高度重复加到和。
实际上,您实际上是使用坐标在矩阵中的索引运行,坐标在A [0]到D [0]指定的范围内,对于y,A [1]到D [1]。
例如:如果A =(0,6)且D =(3,8),则循环评估为,
for i in range(0,4): for j in range(6,9): totalSum+=matrix[i][j]
希望这会有所帮助。
答案 1 :(得分:1)
A
表示左上角的坐标。 A[0]
是X坐标,A[1]
Y坐标...
因此,range(A[0], D[0] + 1)
循环左边界和右边界之间的所有X值。
Y轴的类似推理。