查找匹配行
Finding matching rows
给定两个具有相同列数的矩阵 A 和 B 我想知道是否有任何行是在 A 和 B 中相同。在 Dyalog APL 中,我可以像这样使用函数 split:
(↓A) ∊ ↓B
有没有不用split函数也能计算出相同结果的方法?
您发现 Membership ∊
in that it implies that the right argument is a set of scalars rather than looking at it as a collection of major cells. This precluded extension according to Leading axis theory. However, Index of ⍳
中的一个设计缺陷被 扩展,因此我们可以利用它 returns 未找到主要单元格时超出查找数组末尾的索引:
⎕← A ← 4 2⍴2 7 1 8 2 8 1 8
2 7
1 8
2 8
1 8
⎕← B ← 5 2⍴1 6 1 8 0 3 3 9 8 9
1 6
1 8
0 3
3 9
8 9
(↓A) ∊ ↓B
0 1 0 1
Membership ← {(≢⍵) ≥ ⍵⍳⍺}
A Membership B
0 1 0 1
这里也可以默认写成Membership ← ⊢∘≢ ≥ ⍳⍨
.
无论哪种方式,请注意避免绕行嵌套数组会显着提高速度:
A←?1000 4⍴10
B←?1000 4⍴10
]runtime -compare "(↓A) ∊ ↓B" "A Membership B"
(↓A) ∊ ↓B → 1.6E¯4 | 0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
A Membership B → 8.9E¯6 | -95% ⎕⎕
像 A⍳B 这样的东西不仅会显示成员资格,还会显示相等行的位置。
给定两个具有相同列数的矩阵 A 和 B 我想知道是否有任何行是在 A 和 B 中相同。在 Dyalog APL 中,我可以像这样使用函数 split:
(↓A) ∊ ↓B
有没有不用split函数也能计算出相同结果的方法?
您发现 Membership ∊
in that it implies that the right argument is a set of scalars rather than looking at it as a collection of major cells. This precluded extension according to Leading axis theory. However, Index of ⍳
中的一个设计缺陷被 扩展,因此我们可以利用它 returns 未找到主要单元格时超出查找数组末尾的索引:
⎕← A ← 4 2⍴2 7 1 8 2 8 1 8
2 7
1 8
2 8
1 8
⎕← B ← 5 2⍴1 6 1 8 0 3 3 9 8 9
1 6
1 8
0 3
3 9
8 9
(↓A) ∊ ↓B
0 1 0 1
Membership ← {(≢⍵) ≥ ⍵⍳⍺}
A Membership B
0 1 0 1
这里也可以默认写成Membership ← ⊢∘≢ ≥ ⍳⍨
.
无论哪种方式,请注意避免绕行嵌套数组会显着提高速度:
A←?1000 4⍴10
B←?1000 4⍴10
]runtime -compare "(↓A) ∊ ↓B" "A Membership B"
(↓A) ∊ ↓B → 1.6E¯4 | 0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
A Membership B → 8.9E¯6 | -95% ⎕⎕
像 A⍳B 这样的东西不仅会显示成员资格,还会显示相等行的位置。