我上下颠倒地阅读文档。在我的生命中,我无法辨别"行"的影响是什么。这是我的测试代码,它似乎也没有揭示。
>> a=table((1:5)',{'a';'bc';'def';'gh';'i'})
a = Var1 Var2
____ _____
1 'a'
2 'bc'
3 'def'
4 'gh'
5 'i'
>> b=a([1 2 3],:)
b = Var1 Var2
____ _____
1 'a'
2 'bc'
3 'def'
>> c=a([2 3 4],:)
c = Var1 Var2
____ _____
2 'bc'
3 'def'
4 'gh'
>> intersect(b,c)
ans = Var1 Var2
____ _____
2 'bc'
3 'def'
>> intersect(b,c,'rows')
ans = Var1 Var2
____ _____
2 'bc'
3 'def'
无。如果输入A
和B
是具有相同变量的表,我们有:
具有相同值但名称不同的两行被认为是相等的。
默认包含'rows'
选项。实际上,在表intersect
方法(@table intersection .m)中对intersect
的底层调用是:
[~,ia,ib] = intersect(ainds,binds,flag,'rows');
仅用于区分数组元素的相交或数组的行。例如
A = [2 2 2; 0 0 1; 1 2 3; 1 1 1];
B = [1 2 3; 2 2 2; 2 2 0];
>> [C, ia, ib] = intersect(A,B)
C =
0
1
2
3
和
>> [C, ia, ib] = intersect(A,B, 'rows')
C =
1 2 3
2 2 2
如果你阅读文档,intersect(a,b)
表单上面写着:
如果A和B是表,则intersect返回这两个表共有的行集。
对于intersect(a,b,'rows')
格式它说:
因此,可以得出结论,对于表,操作是相同的,正如您所演示的那样。但是,如果使用普通的旧数组,则行为不同:将A的每一行和B的每一行视为单个实体,并返回A和B共有的行。
a = randi(10, 10)
intersect(a, a)
ans =
1
2
...
10
这里我们将数组平展,并寻找相同的单元格。
intersect(a, a, 'rows')
ans =
9 3 ... 7
...
这里我们按行进行比较,并将结果作为完整匹配的行返回,就像您在问题中显示的数组是表一样。
你也可以试试:
a = randi(10, 10)
b = randi(10, 10)
intersect(a, b)
intersect(a, b, 'rows')
第一个表单几乎总是得到1到10,而第二个表单几乎没有得到任何匹配。