TSL语言基础 > 矩阵计算 > 矩阵查找和遍历的保留字和算符

MFind    

简述
查找矩阵中符合条件的行列信息,同时还可以对原数组中符合条件的元素进行批量替换。根据调用时参数的个数不同,功能对应如下:

一个参数:返回项为真的行列信息,若数组是一维,则返回也为一维数组,对应项为真的行下标序列

两个参数:返回符合指定条件的值的行列信息,结果是个二维数组(包括数组是一维的情况)

三个参数:返回行列信息的同时是否还返回其对应的值

四个参数:结果返回行列信息的同时,还对源数组符合条件的值进行替换,直接对源数组进行更新。
定义
MFind(matrix:Array[;Exp:Expression[;RetValues:Boolean=False[;ReplaceValue]]]):Array;
参数
名称类型说明
matrixArray为查找的数组,如果只有一个参数,默认查找为真的项。
ExpExpression条件表达式。可选参数,例如:MCell>5为值>5,还可以调用Mrow,Mcol等关键字
RetValuesBoolean=False布尔类型,可选参数,如果只返回符合条件的行列信息,设置假(默认值)。
如果还需要返回符合条件的值则设置为真。
ReplaceValue 任意值,可选参数,对查找的数组进行值的替换,用于替换符合条件的值
返回Array 数组,返回符合条件的行列信息表,若数组为二维或多维,则返回第0列为行下标值,第1列为列下标值。如果RetValues为真,则第2列为符合条件的项值。
  • 范例


    范例01:一个参数:返回二维数组的项为真的对应的下标


    t:=array((0,2,3),(2,3,nil));

    return Mfind(t);

    返回:


    范例02:一个参数:返回一维数组的项为真的对应的下标
    t:=array(0,1,2,3,nil,4);
    return Mfind(t);

    返回:
    范例03:多个参数:指定条件的值的下标、带值输出,替换等结果的展示
    A:=Array((1,2,3,4,5),(2,3,4,5));
    B:=Mfind(A,Mcell>3);
    C:=Mfind(A,Mcell>3,True);
    D:=Mfind(A,Mcell>3,false,3);

    B与D的结果为:    C的结果为(列名为2的为该项的值):
       
    执行完D:=Mfind(A,Mcell>3,false,3);后,数组A的结果为:

    PS:C和B的结果的差异就是C多出一列为符合条件的值,而0列为行标,1列为列标。
    D的结果与B一致,而数组A的结果中>3的值被替换成3。 1.6
    单参数例子:
    范例04:找出数组中指定列符合指定条件的子集
    假定有随机数组b如b:=rand(1000,10);
    select的代码c:=select * from b where [0]>0.5 end;可以获得列0大于0.5的子集
    可以很便捷地使用矩阵模式代码替代:c:=b[mFind(b[:,0].>0.5)];
    其中b[:,0].>0.5得到一个一维的真假数组,大于0.5的行为1,否则为0
    mFind(b[:,0].>0.5)获得为1的行标,用于子矩阵b[mFind(b[:,0].>0.5)]则获得了符合条件的B的子集。
内容
相关