MFind可以查找矩阵中的符合条件的行列以及值。
例如,我们在一个随机矩阵中寻找值大于0.9的值所处在的位置:
A:=Rand(10,10);
B:=MFind(A,MCell>0.9);
B的返回结果为一个二维数组,第0列为符合条件的行号,第1列为符合条件的列号。
如果我们除了要返回行列号,还需要返回符合条件的结果,则用MFind(A,MCell>0.9,True)即可,这样第2列为符合条件的值。
在查找的时候,第二个参数为一个条件表达式,我们可以利用MCell获得值,也可以利用MRow获得行下标,MCol获得列下标,所以我们也可以做出复杂的查询。
复杂应用案例:
例如:
A为矩阵,内容为股票的最近N日的日期,我们假定我们的范例中的股票均已上市N日以上。
N:=100;//一百个交易日
A:=Zeros(N,array("SZ000001","SZ000002")); //得到一个N行两列的0矩阵,列名为股票代码
Cols:=MCols(A,1);
for j:=0 to length(Cols)-1 do //初始化时间数组
begin
SetSysParam(pn_stock(),Cols[j]);
SetSysParam(pn_date(),now());
A[:,j:j]:=`NDay3(N,sp_time()); //给第J列赋值为时间
end;
B:=MFind(A,Spec(SpecDate(Close()>Ref(Close(),1)*1.02,MCell),MCol),1); //MCell为时间,MCol为股票代码
return B;
返回的B的结果为股票涨幅大于2%的股票和时间。