How would I replace a string of numbers with more numbers using for and if statements?

Here is my code so far. I'm trying to make it so that if the number is "1" in the string, it replaces it with five zeros. If the number is "2" in the string it replaces that with 5 ones, and if the number is "3" in the string, it replaces it with 5 twos and make that all a different string of numbers called d. The end should look like this: d = [0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,2,2,2,2,2]. I really need help, I am awful with matlab.
if true
t = [1,2,1,2,1,3];
% For Loop
for n = 1:length(t)
if t(n) == 1
d(n) = 0,0,0,0,0;
elseif t(n) == 2
d(n) = 1,1,1,1,1;
else t(n) == 3
d = 2,2,2,2,2;
end
end
end

 Accepted Answer

t = string([1,2,1,2,1,3]);
d=cell(1,numel(t)); %pre-allocation
for i = 1:numel(t)
if t(i)=='1'
d{i}=[ones(1,5)*0];
elseif t(i)=='2'
d{i}=[ones(1,5)*1];
elseif t(i)=='3'
d{i}=[ones(1,5)*2];
end
end
d = horzcat(d{:})
command window:
>> COMMUNITY
d =
Columns 1 through 13
0 0 0 0 0 1 1 1 1 1 0 0 0
Columns 14 through 26
0 0 1 1 1 1 1 0 0 0 0 0 2
Columns 27 through 30
2 2 2 2
>>

2 Comments

Wow, I didn't even know about the horzcat command, do you think you would be able to explain your thought process or something? I know this is a simple matlab code for you probably, but it's so frustrating not being able to understand why you're doing what you do. Thank you so much!
1)just created 1 by 5 cell array;
2) made a loop until the number of cell array;
3)made if and else if conditions to store elements in each cell when the condition is satisfied;
4)finally concatenated them horizontally.
What's the advantage?
Cells are huge containers they can compress how much ever you feed inside them unlike the normal arrays

Sign in to comment.

More Answers (1)

Keep in mind when programming there is usually more than one way to accomplish your goal. Here is an additional solution. This may not be the most efficient way since the size of vector d changes every loop iteration but it is still a solution nonetheless.
t = [1 2 1 2 1 3];
d=[]; % create empty vector d
for n = 1:length(t)
if t(n)==1
d = [d 0 0 0 0 0]; %add new numbers to end of vector d
elseif t(n)==2
d = [d 1 1 1 1 1];
elseif t(n)==3
d = [d 2 2 2 2 2];
end
end
disp(d)

4 Comments

Thats an awesome solution! I like this better than the other one. It feels more basic to me since I know the things going on here. But I'm just not sure why you had to put d before the numbers when creating the new vector. Anyways, I have another question if you'd be down to answer that, and if you have discord maybe we could just talk about this. It would be much easier than typing. Let me know if you're down to answer another question. Thank you!
What you are actually doing when you put d at the beginning of the vector is saying I'm going to create a new vector d that includes all of the contents of the old vector d plus add on the rest of the numbers at the end. If you didn't place d as the first entry it would just completely replace it everytime so at the end the d vector would only contain 5 of the same number. I encourage you to erase the d and run the code and see what happens. I do not have Discord but will be happy to answer another question if I can.
Alright, so basically I need to make a "random walker" that walks in either direction using a for loop. It can walk forward one, back one back one forward one, it just has to be random for a thousand times. Then I need to use comet to simulate the walk, and im just not sure how to set up this code. So far I have this. I need to plot the walk as a function of time. I don't know what I'm doing wrong.
%%Part 1
% Simulation of Walker
t = linspace(0,1001,50000);
x = 0;
d = randn(0,2);
for n = 1:1001
if d == 0
x = x;
elseif d == 1
x = x + 1;
else d == 2
x = x - 1;
end
end
comet(x,t);
Follow madhan ravi's answer: it shows good practice: a preallocated cell array to store the intermediate arrays.

Sign in to comment.

Categories

Products

Release

R2018a

Tags

Community Treasure Hunt

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

Start Hunting!