我想用Matlab进行SQL风格的连接。我可以通过创建数据集(统计工具箱),进行连接,转换和再次删除数据集来实现:
A1 = [10 10 20 20 30 30 50 50]';
B1 = (10:10:70)';
B2 = (1:7)';
dsA = dataset({A1, 'Key'});
dsB = dataset({B1, 'Key'}, {B2, 'Idx'});
dsA = join(dsA, dsB, 'key', 'Key');
结果:
Key Idx
10 1
10 1
20 2
20 2
30 3
30 3
50 5
50 5
我的问题:还有另一种方法吗?不使用数据集而没有for循环?
非常感谢您的帮助!
答案 0 :(得分:2)
对于您的示例,您只需使用ISMEMBER:
[~,loc] = ismember(A1,B1);
dsA = [B1(loc) B2(loc)]
结果:
dsA =
10 1
10 1
20 2
20 2
30 3
30 3
50 5
50 5
注意:这假设A1
中的所有元素都在B1
中找到。如果情况并非如此,您可以使用ISMEMBER的第一个输出来过滤loc
中的零值......