Vector APL中的向量比较
我想检查APL中的两个向量是否相同。现在我正在使用以下解决方案(逐元素比较,元素求和,并与向量Vector APL中的向量比较,vector,apl,Vector,Apl,我想检查APL中的两个向量是否相同。现在我正在使用以下解决方案(逐元素比较,元素求和,并与向量a的大小进行比较): 有没有更快或更惯用的解决方案?您可以使用match函数来比较其整个参数,而不是equals函数,equals函数是一个标量函数,用于比较每个参数的元素: a←1 2 3 b←1 2 3 4 5 c←1 2 3 a≡b 0 a≡c 1 如上所述,如果参数完全相同,则match原语返回1。这意味着它们具有完全相同的等级
a
的大小进行比较):
有没有更快或更惯用的解决方案?您可以使用match函数来比较其整个参数,而不是equals函数,equals函数是一个标量函数,用于比较每个参数的元素:
a←1 2 3
b←1 2 3 4 5
c←1 2 3
a≡b
0
a≡c
1
如上所述,如果参数完全相同,则match原语返回1。这意味着它们具有完全相同的等级、形状、数据类型和内容。在少数情况下,match将返回假阴性,因为数据类型问题(除法导致浮点表示,即使它在整数的比较容差内),或者因为定标器将不匹配1元素向量 ^/a=b 如果测试的所有元素都等于b的对应元素,则返回1,但如果a和b的长度不同,则返回1会导致长度错误,并使用定标器扩展,因此如果a为1,b为定标器1,则结果将为1
匹配通常更好,在大型阵列上也更有效。关于David Siegel所写的,如果将任何0元素与几乎为零的元素进行比较,匹配就会失败,即使⎕CT(比较公差)超过差异。例如
3 2 1 0≡ 3 2 1 1E'100
。
a←1 2 3
b←1 2 3 4 5
c←1 2 3
a≡b
0
a≡c
1