我想用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循环 ?
非常感谢您的帮助!
对于您的示例,您可以简单地使用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。
A1
B1
loc