知识库 > 矩阵专题

矩阵代码优化    

  • 对于二维数组的行操作快于列操作,例如求一个1000*1000的方阵各行的和与各列的和。

    X := Rand(1000,1000) ;
    Sumr := array();
    Mtic ;
    For i := 0 to mrows(X)-1 do
    Sumr[i] := sum(X[i]);
    T1 := Mtoc;
    Mtic ;
    For i := 0 to mcols(X)-1 do
    Sumr[i] := sum(X[:,i]);
    T2 := mtoc;
    Return array(t1,t2);

    结果:array(0.147,0.3011)。说明tsl数组以行取数据比以列取数据更快。这主要是因为tsl中数组的存储是一行一行的存储。
    矩阵操作符的运算速度远远快于for循环,例如求矩阵的乘法。

    A := Rand(300,300);
    B := Rand(300,300);
    Multi := array();
    Mtic ;
    For i := 0 to mrows(A)-1 do
    For j :=0 to mcols(B)-1 do
    Multi[i,j] := sum(a[i]*b[:,i]);
    T1 := Mtoc;
    Mtic ;
    Mult := A :* B;
    T2 := Mtoc;
    Return array(t1,t2);

    结果:array(9.3269,0.0173),从结果中可以看出,操作符的运算速度是循环的100倍。因为,操作符是c语言的代码,而且,在操作符优化了算法,算法复杂度也远远小于循环。