Nested for loop to parse specific array indices not working?

2 views (last 30 days)
So I am writing a code that parses over binary data but I have to put the data into an array for this to work. Basically, the array has a size of 500 bits (1/0s) and I treat these bits as if it were a 50 by 10 frame of data. So in other words every tenth bit represents a new row. I need to only assign data to columns 5-8 of each row and I am assigning these values a value of 1 while the rest are all zeros. So I am writing my function like this:
function A = createData()
A=zeros(1,500);
for i=5:10:110
for j=8:10:110
for k=i:j
A(k)=1;
end
end
end
end
But I am getting every bit from position 5 to position 108 filled with 1s rather than just the 4 bits per row of ten. Anybody know why this doesn't work or what I am missing?

Accepted Answer

Star Strider
Star Strider on 18 Jun 2014
This works:
A = zeros(1,500);
Ar = reshape(A, {}, 10);
Ar(:,5:8) = 1;
A2 = zeros(1,500)
for k1 = 1:10:500
A2(k1:k1+9) = Ar(fix(k1/10)+1,1:10);
end
A2
Note: My initial idea was to use Ar(:)' as the output but when I tried it, it didn’t produce the correct outuput.
A2 here produces:
A2 =
Columns 1 through 19
0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0
Columns 20 through 38
0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1
Columns 39 through 57
0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 ...
which is what I believe you want.

More Answers (2)

Image Analyst
Image Analyst on 18 Jun 2014
Do you mean like this:
A=zeros(1,500); % Initialize
a2 = reshape(A, [50, 10]) % Make into 2D array.
% Set columns 5-8, for all rows of the array, = 1
a2(:,5:8) = 1
% Reshape back into a row vector.
A = a2(:)'

Andrei Bobrov
Andrei Bobrov on 18 Jun 2014
ii = [5,8];
n=10;
v = zeros(1,500);
v(ii(1):n:end) = 1;
v(ii(2)+1:n:end) = -1;
A = cumsum(v);

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!