Arrays 如何在Matlab中使用嵌套或双for循环通过比较现有一维数组生成新的一维数组

Arrays 如何在Matlab中使用嵌套或双for循环通过比较现有一维数组生成新的一维数组,arrays,matlab,for-loop,Arrays,Matlab,For Loop,比如说 我有一个大小为9的二进制数组,作为b=[011011],然后是另一个大小为7的数组'm',作为m=[21283645666]。这里我想用m的第一个元素来改变b的所有零,然后用m的连续元素来替换b的1,这样我的输出1D数组应该像k=[21282136214566]。 下面是我的代码,我真的不知道我哪里出错了,请帮我解决这个问题 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

比如说 我有一个大小为9的二进制数组,作为b=[011011],然后是另一个大小为7的数组'm',作为m=[21283645666]。这里我想用m的第一个元素来改变b的所有零,然后用m的连续元素来替换b的1,这样我的输出1D数组应该像k=[21282136214566]。 下面是我的代码,我真的不知道我哪里出错了,请帮我解决这个问题

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]

使用逻辑索引代替-它更快、更可读:

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