我有一个ID编号重复偶数次的向量。我只对每两个数字出现一次感兴趣。我想创建一个 boolean 掩码,该掩码对数字的第二次出现给出true/1。我已经使用循环完成了此操作,但是实际向量将包含数百万个元素,因此循环太慢。我需要一个“向量化”解决方案。

这是一个向量示例:

101
102
103
101
104
102
101
103
101
104

这应该输出以下掩码:
0 (first occurrence of 101)
0 (first occurrence of 102)
0 (first occurrence of 103)
1 (second occurrence of 101)
0 (first occurrence of 104)
1 (second occurrence of 102)
0 (third occurrence of 101)
1 (second occurrence of 103)
1 (fourth occurrence of 101)
1 (second occurrence of 104)

最佳答案

让我们 bsxfun 作为矢量化解决方案-

%// Assuming A as the input vector
M = bsxfun(@eq,A(:),unique(A(:).'))  %//'
out = any(M - mod(cumsum(M,1).*M,2),2)

关于Matlab返回向量中每第二次出现的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32591790/

10-10 23:10