比方说 array a=[1,3,8,10,11,15,24]
,以及 logical array b=[1,0,0,1,1,1,0,0,0,1,1,1,1,1]
,如何获取[1,1,3,1,3,8,1,3,8,1,2,3,8,10]
,查看 b
中逻辑变为 1 的位置,数组索引a
重置,因此它从头开始,逻辑变为 0 a array
的情况也相同从头开始并继续 1,3,8,10..etc.
最佳答案
您可以使用 diff
查找 b
发生变化的位置,然后使用 arrayfun
为 a
生成索引:
a=[1,3,8,10,11,15,24];
b=[1,0,0,1,1,1,0,0,0,1,1,1,1,1];
idxs = find(diff(b) ~= 0) + 1; % where b changes
startidxs = [1 idxs];
endidxs = [idxs - 1,length(b)];
% indexes for a
ia = cell2mat(arrayfun(@(x,y) 1:(y-x+1),startidxs,endidxs,'UniformOutput',0));
res = a(ia);
关于arrays - 在 Matlab 中将数组映射到逻辑数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43494452/