2016-04-10 10 views
1

たとえば 私はサイズb = [0 1 0 1 0 1 1 1 1 1]次に、m = [21 28 36 45 45 66 66]のようなサイズが7の別の配列 'm'。ここでは、mの最初の要素で 'b'のすべての0を変更し、 'm'の連続要素でbの1を置き換えたいので、出力1Dの配列はk = [21 28 21 36 21 45 45 66 66] 。以下 は、私がこのMatlabのnestedまたはdouble forループを使用して既存の1D配列を比較して新しい1D配列を生成する方法

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]

答えて

2

として出力を取得しています解決するために私を助けて間違いくださいました。ここで、iは本当に知らない私のコードです代わりに、論理インデックスを使用してください - それはより速く、より読みやすいです:

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