【发布时间】:2015-01-21 01:33:22
【问题描述】:
如果我有一个矩阵的上三角部分,在对角线上偏移,存储为一个线性数组,如何从数组的线性索引中提取矩阵元素的(i,j) 索引?
例如,线性数组[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9是矩阵的存储
0 a0 a1 a2 a3
0 0 a4 a5 a6
0 0 0 a7 a8
0 0 0 0 a9
0 0 0 0 0
我们想知道数组中的 (i,j) 索引对应于线性矩阵中的偏移量,而不需要递归。
一个合适的结果,k2ij(int k, int n) -> (int, int) 会满足,例如
k2ij(k=0, n=5) = (0, 1)
k2ij(k=1, n=5) = (0, 2)
k2ij(k=2, n=5) = (0, 3)
k2ij(k=3, n=5) = (0, 4)
k2ij(k=4, n=5) = (1, 2)
k2ij(k=5, n=5) = (1, 3)
[etc]
【问题讨论】:
-
为最后一列的元素写一个公式。为了更容易编写一个从行号(列号是固定的)计算线性索引的公式,然后将其反转。从那里开始一个通用公式。
-
请注意,这里介绍的求解方法也可用于列出一次取 2 件的 N 个事物的组合(无需重复),无需任何迭代/递归。
-
回答了没有偏移量的相同问题here
标签: c++ arrays numpy linear-algebra triangular