TSL语言基础 > 矩阵计算

矩阵的重构与下标的变换    

  • 矩阵的重构Reshape函数可以将一个多维数组拉伸为一维数组,或重构为指定大小的矩阵。
    例如:
    A:=Rand(3,6);
    B:=Reshape(A);//B为拉伸的长度为18的一维数组
    C:=Reshape(A,2,9);//产生2*9的矩阵
    D:=Reshape(A,6,Array(“A”,“B”,“C”));//产生6行3列矩阵
    E:=Reshape(A,array(“A”,“B”,“C”,“D”,“E”,“F”),array(“F1”,“F2”,“F3”));//全下标指定的方式产生矩阵。
    F:=Reshape(A,3,3,2);//产生一个3*3*2的三维数组


    ReIndex,ReIndexCopy下标变换:这两模型可以修改数组的指定下标为新下标,区别在于Reindex直接修改原数组,而ReindexCopy不修改原数组,通过返回产生一个修改后的数组。
    如:
    A:=array("A":0,"B":1,"D":2,"E":3);
    ReIndex(A,array("A":"A1","D":nil));
    A的结果变为: array("A1":0,"B":1,"E":3);
    参数array("A":"A1","D":nil)的含义是:将字符串下标"A"改为"A1",把字符串下标"D"删除。

    如果我们要对多维数组进行处理,假定我们有:
    A:=rand(10,array("A","B","D","E"); //初始化一个四列的二维矩阵
    ReIndex(A,nil,array("A":"A1","D":nil));
    第2个参数为nil表示对第一维的下标不进行变动,因此我们修改列"A"为"A1",并删除"D"列。
    更多维的处理以此类推。

    利用Reindex也可以做下标的交换
    例如:
    A:=array(1,2,3,4,5);
    reIndex(A,array(0:4,4:0));
    A的结果为array(5,2,3,4,1);