2013-08-07 91 views
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]看作數組中的第一個值,但矩陣是2D。有人能向我解釋這個函數背後的邏輯嗎?

謝謝你的幫助!非常感激!

回答

2

範圍是迭代不包含 「high」元素的序列(低,高)的函數。

如果您確實需要遍歷數字序列,則內置函數範圍()將派上用場。當你說範圍(A [0],d [0] 1)的下限爲A [0]和上限

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


所以,:它生成包含算術級數,例如列表本質上是D [0]。所以來到邏輯,其簡單的數學。

Area = integral ydx。


A [0]和d [0]是x座標的左上和右下的分別座標。
A [1]和D [1]是y座標。所以,你正在沿着由(D [1] +1到A [1])表示的條帶將矩陣從D [0] +1迭代到A [0](這是dx),其值爲y。


所以高度由在基質通過從d [1] 1到A [1]用於範圍內的特定的x A [0]和循環j中的元素(x,j)的相加來計算d [0]。
對於範圍內的每個x(A [0],D [0] +1),此高度將重複添加到總和中。

實際上,您實際上正在運行矩陣中的索引,使用x和A [1]到D [1]中由y指定的範圍內的座標,y 。

對於離:
如果A =(0,6)和d =(3,8),
環路的計算結果爲,

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

希望這有助於。

+0

這幫了很多!謝謝!!! – Liondancer

1

A代表左上角的座標。 A[0]是X座標,A[1]是Y座標...

因此,range(A[0], D[0] + 1)循環左邊界和右邊界之間的所有X值。

Y軸的相似推理。