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

时间:2016-04-10 18:06:55

标签: arrays matlab for-loop

例如 我有一个大小为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]

1 个答案:

答案 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