比较APL中的向量

 2021-04-26 

Comparing vectors in APL

我想检查APL中2个向量是否相同。现在,我正在使用以下解决方案(逐个元素比较,对元素求和并与向量a的大小进行比较):

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。

匹配通常对此更好,并且在大型阵列上也更有效。