【问题标题】:Calculate matrix cell value from it's indices从它的索引计算矩阵单元格值
【发布时间】:2017-10-17 23:11:04
【问题描述】:

如果我想用以下格式的数字填充矩阵(注意 [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

我的问题是:有什么方法可以从它的索引计算单元格值,而不需要遍历所有矩阵单元格到目标单元格?

ex : 给定 i=2 , j=2 (从 i & j => 13 计算单元格值)

我为什么需要这个?就我而言,我有大尺寸的大型矩阵,上面的示例仅用于演示目的。

【问题讨论】:

  • 是的,如果可能的话@n.m
  • 在矩阵中画一些上升的对角线。假设 2 和 3 在上升对角线上。 11 12 13 14 15 在另一个上升对角线上。给定一对索引,你能计算出穿过该单元格的上升对角线的数量吗?那对角线内的单元格的数量呢?所有对角线上有多少个数字小于这个数字?
  • 我现在很困惑,对不起,我没有明白你的意思

标签: algorithm matrix


【解决方案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. ,则单元格位于上半部分
  4. 所以根据备注,对角线的第一项就是(i+j)*(i+j+1)/2 + 1

  5. 因此上半单元格的公式

  6. 对于下半单元,我只是对称坐标。

【讨论】:

  • 谢谢,你的救命稻草 :)
  • @hivert 你能解释一下吗?
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2013-11-18
  • 2022-11-21
  • 1970-01-01
相关资源
最近更新 更多