2017-02-25 30 views
2

如果我要填寫與以下格式的數字矩陣(注意數字從[1-25]序列)計算矩陣單元格的值的指數

1 | 3 | 6 | 10 | 15 
2 | 5 | 9 | 14 | 19 
4 | 8 | 13| 18 | 22 
7 | 12| 17| 21 | 24 
11| 16| 20| 23 | 25 

我的問題是:有沒有從它的指數計算單元格值而不循環所有矩陣單元到目標單元格的方法?

例如:給定I = 2,J = 2(計算單元格的值從i & J => 13)

爲什麼我需要這個?在我的情況下,我有大尺寸的矩陣,上面的例子僅用於演示目的。

+0

是的,如果可能@n.m –

+0

在矩陣中繪製一些上升的對角線。說2和3在一個上升的對角線上。 11 12 13 14 15在另一個上升的對角線上。給定一對指標,你可以計算通過該單元的上升對角線的數量嗎?那對角線內的細胞數量呢?所有對角線上有多少數字小於這個數字? –

+0

我現在很困惑,對不起,我沒有明白你的意思 –

回答

1

你必須記住1 + 2 + 3 + ... + N = N *(N + 1)/ 2。 這裏是在Python(我敢肯定,我已經回答了這個問題,但我不能找到它)的解決方案:

def diag(i, j, N): 
    if i+j < N: 
     return (i+j)*(i+j+1)/2 + i + 1 
    else: 
     return N*N - diag(N-i-1, N-j-1, N) + 1 

然後:

>>> [[diag(i,j, N) for i in range(N)] for j in range(N)] 
[[1, 3, 6, 10, 15], 
[2, 5, 9, 14, 19], 
[4, 8, 13, 18, 22], 
[7, 12, 17, 21, 24], 
[11, 16, 20, 23, 25]] 

幾點說明,

  1. 座標i,j中的單元位於對角線i + j

  2. 單元是在上半部分,如果I + J <Ñ

  3. 因此,根據上述表示的,對角的第一項是(I + J)*(I + J + 1)/ 2 + 1

  4. 因此上半部分單元的公式爲

  5. 對於下半部分單元格,我只是對稱座標。

+0

謝謝你,你的救命啊:) –

+0

@hivert你可以給這個小范例嗎? –