获得比赛的所有指标在另一个数组的元素

11视图(30天)
给定两个向量A和B,我想找到所有匹配的元素的索引B在A。如果我有:
一个= [1 2 1 2 2 3 1];
B = (1 2 3);
输出= [1 3 7;2 4 5 6 0 0]。
第一行对应找到(A = = B(1))和第二行对应找到(A = = B(2))等;
我知道这可以轻易完成的循环,但是循环向量B会很慢,因为我有一个非常大的向量和向量的B和43200个元素。此外,我做这一步后一个漫长的过程,所以我寻找解决方案通过向量化。我尝试了不同的方法,但不给我所有指标!我不确定如果通过向量化的解决方案,但是在这里我想问。
什么好主意吗?

答案(3)

埃里克
埃里克 2017年11月1日
编辑:埃里克 2017年11月1日
你会遇到问题如果有不同数量的A, b .如果你知道indicies,使用这样的:
[ia, ib] =找到(bsxfun (@eq, shiftdim (A, 1), B));
它将返回所有可能匹配的所有值B, B的ib是indicies和ia的indicies答:如果你知道,总是会有3场比赛的每一个B,您可以添加类似
输出=重塑(ia,[3元素个数(ia) / 3]) ';
让你上面的输出(确认与你提供的测试用例和B)。
1评论
穆罕默德Almatrafi
穆罕默德Almatrafi 2017年11月1日
编辑:穆罕默德Almatrafi 2017年11月1日
谢谢你的回答。有不同的功能可以实现相同的ia和ib函数得到的。问题是重复的每个元素B的数量是不同的。
再次感谢。

登录置评。


乔斯(10584)
乔斯(10584) 2017年11月1日
埃里克说,在大多数情况下你会遇到麻烦的。我建议你存储单元阵列的输出,是这样的:
= (1 2 1 1 2 3)
B = (1 2 3 4)
输出= arrayfun (@ (x)找到(x = =), B,“联合国”,0)
% {k}持有所有的指标输出到一个,在A等于B (k)
2的评论
乔斯(10584)
乔斯(10584) 2017年11月2日
文笔for循环与预现在非常快。当你要求vectorised解决方案,我只是提供一个:)

登录置评。


卡尔Witthoft
卡尔Witthoft 2019年9月27日
如果你的版本的MATLAB不太老,查找帮助相交,智慧;
[dat, idxa idxb] =相交(a, b,“稳定”)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!