获取逻辑向量中的最后x个项(为真)

时间:2018-08-29 17:29:19

标签: matlab

我有一个简单的问题,想知道是否有更快的方法(即单行代码或更少的代码行)从逻辑向量中获取最后一个真实的X值。 / p>

这是我拥有的:

%define variables
vec=logical([0 1 1 0 0 1 0 1 0 0 1 1 1 0 0 1]);
lastX=3;
%my approach
idx=find(vec); %find indices of values that are true
idx=idx(end-lastX+1:end); %find last X true values
vec(setxor(1:size(vec,2),idx))=0; %get values that are not in idx, set them false
vec %display output, should report [0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1]

3 个答案:

答案 0 :(得分:5)

通过使用find的额外参数(指定要查找的值的数量以及从中查找值的端),然后返回minimum索引,可以轻松地实现一线工作:

vec(1:(min(find(vec, lastX, 'last'))-1)) = false;

答案 1 :(得分:5)

您可以使用true方向标记,使用cumsum来计算从向量的末尾到开始的'reverse'的出现次数。如果计数大于所需的lastX,则vec中的元素应为false

vec(cumsum(vec, 'reverse') > lastX) = false;

答案 2 :(得分:1)

使用regexp的解决方案。可能效率很低;主要是为了娱乐:

vec(1:regexp(char(vec+'0'),[repmat('10*',1,lastX) '$'])-1) = false;