最近做个项目,需要将行排列的多维数组(如lua、c/c++中)与列排列的多维数组(如matlab、R、Fortune中)进行相互转换。
其实行排列、列排列是个通俗的叫法,严格上说行排列是遍历数组元素时下标从右往左递增的排列,而列排列是下标从左往右的排列。举例:对于int Array[2][2][2],如果按行排列的情况遍历,则为Array[0][0][0],Array[0][0][1],Array[0][1][0],Array[0][1][1],Array[1][0][0],Array[1][0][1],Array[1][1][0],Array[1][1][1];如果按列排列的情况遍历,则为Array[0][0][0],Array[1][0][0],Array[0][1][0],Array[1][1][0],Array[0][0][1],Array[1][0][1],Array[0][1][1],Array[1][1][1]。
如何将lua的一个多维矩阵(行排列)赋值给matlab/R的多维矩阵(列排列)呢?
当然是通过c/c++。毕竟lua、matlab、R等脚本语言都是通过c支持的。另外,在进行矩阵中单个元素赋值的时候,只能通过线性下标的形式。下面给一个思路:
typedef vector<size_t> MATRIX_DIMENSION; // 数组的维度
typedef vector<size_t> MATRIX_INDEX; // 数组下标,遍历数组时使用
MATRIX_DIMENSION mat_dim = ...; // 从lua中读取过来
MATRIX_INDEX subscripts(matrixDim.size(), 0);