给定大小为m * n的数组Array_in和大小为s * 2的R.数组R中的每一行对应于Array_in的第一列的起始值和结束值,并且不应更改Array_in中的相应列元素,即来自Array_in(:,2:end)的相应列元素,并且所有剩余的元素都由NaN替换。输出Array_out的第一列与Array_in相同。数组R的行数发生变化。在以下示例中,行数假定为2.
Array_in = [0 0.1;1 0.8;2 0.5;3 0.2;4 0.3;5 0.6;6 0.8;7 1;8 1.2;9 1;10 0.1];
R = [2 3;6 9];
R第1行:应视为2:3 = [2 3]; R第2行:6:9 = [6 7 8 9];应保留所有行,即[2 3 6 7 8 9] 并且预期的输出是:
Array_out = [0 NaN;1 NaN;2 0.5;3 0.2;4 NaN;5 NaN;6 0.8;7 1;8 1.2;9 1;10 NaN];
如何做到这一点?
答案 0 :(得分:2)
ind = ~any( bsxfun(@ge, Array_in(:,1).', R(:,1)) & ...
bsxfun(@le, Array_in(:,1).', R(:,2)) );
Array_out = Array_in;
Array_out(ind,2:end) = NaN;
答案 1 :(得分:2)
试试这个 -
t1 = bsxfun(@times,1:size(Array_in,1),ones(size(R,1),1))
t2 = bsxfun(@ge,t1,R(:,1)) & bsxfun(@le,t1,R(:,2))
ind = ~any(bsxfun(@eq,Array_in(:,1),find(any(t2))),2)
Array_out = Array_in;
Array_out(ind,2:end)=NaN