2

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

a←1 2 3
b←1 2 3
(+/a=b)=⍴a ⍝ it needs to return 0 or 1

有没有更快或更惯用的解决方案?

4

2 回答 2

6

您可以使用 match 函数来比较其整个参数,而不是使用 equals 函数,后者是一个比较每个参数的元素的标量函数:

       a←1 2 3
       b←1 2 3 4 5
       c←1 2 3
      a≡b
0
      a≡c
1
于 2014-06-08T19:08:14.017 回答
1

如上所述,如果参数完全相同,则 match 原语返回 1。这意味着它们具有完全相同的排名、形状、数据类型和内容。在少数情况下,由于数据类型问题(除法导致浮点表示,即使它在整数的比较容差范围内),或者因为缩放器不匹配单元素向量,match 将返回假阴性.

^/a=b

如果测试的所有元素都等于 b 的相应元素,将返回 1,但如果 a 和 b 的长度不同,它将失败并出现 LENGTH 错误,并且它将使用缩放器扩展,因此如果 a 是 1 1 1 和b 是缩放器 1,结果将为 1。

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

于 2015-12-22T22:46:14.793 回答