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