例如 我有一个大小为9的二进制数组,因为b = [0 1 0 1 0 1 1 1 1],然后是另一个数组' m'大小为7,m = [21 28 36 45 45 66 66]。在这里,我想要更改' b'的所有零。通过m的第一个元素,然后用'' m'的连续元素替换b的1?所以我的输出1D数组应该像k = [21 28 21 36 21 45 45 66 66]。 以下是我的代码我真的不知道我错在哪里请帮我解决这个问题
b= [0 1 0 1 0 1 1 1 1];
b=b(:);
m = [21 28 36 45 45 66 66];
m = m(:);
k=zeros(size(b));
for i=1:length(b)
for j=2:length(m)
if b(i)==0
k(i)=m(1);
else
k(i)=m(j);
end
end
end
我的输出为 k = [21 66 21 66 21 66 66 66 66]
答案 0 :(得分:2)
使用逻辑索引 - 它更快,更易读:
b = [0 1 0 1 0 1 1 1 1];
m = [21 28 36 45 45 66 66];
k = zeros(size(b));
k(b==0) = m(1); % fill values where b=0 with m(1)
k(b==1) = m(2:sum(b)+1); % fill values where b=1 with consecutive m values
结果:
>> k
k =
21 28 21 36 21 45 45 66 66