Comparing vectors in APL
我想检查APL中2个向量是否相同。现在,我正在使用以下解决方案(逐个元素比较,对元素求和并与向量
1 2 3 | aa??1 2 3 ba??1 2 3 (+/a=b)=a?′a a?? it needs to return 0 or 1 |
有没有更快或更惯用的解决方案?
您可以使用match函数来比较其整个参数,而不是equals,它是一个用于比较每个参数元素的标量函数:
1 2 3 4 5 6 7 | aa??1 2 3 ba??1 2 3 4 5 ca??1 2 3 aa‰?b 0 aa‰?c 1 |
如上所述,如果参数完全相同,则匹配原语返回1。这意味着它们具有完全相同的等级,形状,数据类型和内容。在某些情况下,由于数据类型问题(除法会导致浮点表示,即使在整数的比较容差范围内),或者因为缩放器将不匹配1元素向量,匹配会返回假负数。
^ / a = b
如果测试的所有元素都等于b的对应元素,则
将返回1,但是如果a和b的长度不同,它将失败并出现LENGTH错误,并且它将使用定标器扩展,因此如果a为1 1 1和b是缩放器1,结果将为1。
匹配通常对此更好,并且在大型阵列上也更有效。