How do I change values in an array based upon its previous value?
2 views (last 30 days)
Show older comments
Michael Rowlinson
on 15 May 2019
Commented: Michael Rowlinson
on 16 May 2019
Hi all! I'm new to MATLAB.
So basically I have a 2D array and a spreading pattern/fractal that I wish to execute, I can make the pattern happen when turning zeros to ones but then it get's messy after that. the image is a basic rundown of what I want to happen for each iteration of the pattern.
Thank you, Michael.

1 Comment
Guillaume
on 15 May 2019
Why isn't the pattern spread around the 1s in step 2? I.e. why isn't that last matrix:
0 0 1 0 0
0 1 2 1 0
1 2 3 2 1
0 1 2 1 0
0 0 1 0 0
Accepted Answer
Guillaume
on 15 May 2019
Edited: Guillaume
on 15 May 2019
Assuming you've made a mistake in your second step (see comment), this is trivially achieved with imdilate (requires image processing toolbox
A = [0 0 0 0 0; 0 0 0 0 0;0 0 1 0 0; 0 0 0 0 0; 0 0 0 0 0]
nstep = 5;
for step = 1:nstep
A = imdilate(A > 0, [0 1 0; 1 1 1;0 1 0]) + A
end
3 Comments
Guillaume
on 16 May 2019
Edited: Guillaume
on 16 May 2019
Ah, ok. You can use a simple 2d convolution to find the number of neighbours a value. Then it's a simple matter of a bit of arithmetic:
A = [0 0 0 0 0; 0 0 0 0 0;0 0 1 0 0; 0 0 0 0 0; 0 0 0 0 0]
nstep = 5;
for step = 1:nstep
A(A > 0) = A(A > 0) + 1; %increase existing values by 1
A = A + (conv2(A > 0, [0 1 0;1 0 1;0 1 0], 'same') == 1) .* ~A %find zeros with just one neighbour, set them to 1
end
More Answers (0)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!