在下文中,我将使用类型定义:
typedef float zreal;
typedef float* zvect;
typedef float** zmatr;
假设我有一个zvect
总长度n
,我想将它重铸为一个zmatr
带m
列的(当然假设m
除以n
)。“zvect
对象”按行打包值zmatr
,即它是a = [a1 a2 ... ap]
where a
is 的类型zvect
(被认为是行向量)。我需要将其转换为zmatr
如下所示:
zmatr = [a1
a2
...
ap]
其中a1,...,ap
代表行向量。有没有办法将 my 重铸zvect
为 a zmatr
(无需将值复制到新实体)?最有效的方法是什么?请注意,我希望避免直接使用向量访问矩阵的值,例如z[getIndex(i,j,ncols)];
where getIndex(int i,int j, int ncols)
returns i*ncols+j
。任何建议将不胜感激。
更新:似乎以下代码可以完成这项工作:
zvect v;
create_vector(&v,100);
zmatr zm;
zmatr* matrix = &zm;
*matrix = (zmatr)malloc(sizeof (zvect) * 10);
int i;
for (i = 0; i < 10; ++i) {
(*matrix)[i] = &(v[i*10]);
}