在逻辑向量中获取最后x项(这是真的)

use*_*193 2 matlab

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

这就是我所拥有的:

%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]
Run Code Online (Sandbox Code Playgroud)

gno*_*ice 5

你可以通过使用额外的参数find(指定要查找的值的数量以及从中找到它们的结尾)来创建一个简单的单行,然后获得返回的最小索引:

vec(1:(min(find(vec, lastX, 'last'))-1)) = false;
Run Code Online (Sandbox Code Playgroud)


bea*_*ker 5

您可以使用方向标志cumsum来计算true从向量末尾开始到开头的出现次数'reverse'.如果计数大于您的期望lastX,那个元素vec应该是false:

vec(cumsum(vec, 'reverse') > lastX) = false;
Run Code Online (Sandbox Code Playgroud)