支持矩阵,可以对fmarray或array的单元格进行判别,组装出对应的矩阵,这样的做法可以避免有些需要循环判别的矩阵操作。对于全数字而言,以前实现需要使用bool矩阵和值矩阵相乘后相加来完成:如(a.>3) * a1 + (a.<=3)*a2,或者采用mfind得到的数组取子矩阵来操作。
新的支持会使得这种操作极为便捷,也符合思维定式
例如a:=array(1,2,3,4,5);
b:=a.>3 .? array(2,3,4,5,6) : array(3,4,5,6,7)
b的结果为:array(3,4,5,5,6)
即,对集合a中每个元素的集进行判断取值,然后得到对应的结果返回到结果集中。
同样,这种方式也支持FMArray。
但是需要注意,当f.?A:B中,A与B都是FMArray时,两者的维度与大小必须是一致的。
当A与B的单元数据类型不一致时,也符合FMArray矩阵合并时对单元格数据类型的包容处理规则。
例如:将矩阵f1中不大于3的值用矩阵f2中的元素替换
f1:=fmarray[[1,2],[0,4],[1,2],[5,6]];
f2:=fmarray[[100,10],[200,20],[300,30],[400,40]];
b:=f1.>3 .? f1:f2;
return b;
结果:
例如:将整型矩阵中不符合条件的值用浮点数10.5替换
f1:=fmarray[[1,2],[0,4],[1,2],[5,6]];
b:=f1.>3 .? f1:10.5;
return b;
返回的矩阵中,所有单元格类型都为浮点数:
注:即便判断中没有出现符合条件的单元,数据类型不同时也会做包容处理。