2017-02-25 31 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你可以给这个小范例吗? –