How to add values into Matlab matrix and not overwrite it
20 views (last 30 days)
Show older comments
Lara Lirnow
on 17 Feb 2017
Commented: Lara Lirnow
on 18 Feb 2017
I have to insert values from a for loop into the matrix, but the values are all the time getting overwritten, so only last values are added into the matrix. What is the way to add every value to the matrix inside a for loop without overwriting?
My code is this:
%reading the file
list = fopen('intervals.txt','r');
C=cell(size(list))
for k=1:length(list)
content = fgets(list(k))
d= strsplit(content,',')
for n=1:length(d) % d contains 25 elements
B = zeros(n,1); % preallocate, results output
y=d{n}
z= strsplit(y,' ')
start=z{1}
stop=z{2}
start1 = str2num(start)
stop1 = str2num(stop)
B = [start1,stop1] %write to the matrix
end
0 Comments
Accepted Answer
Rahul Kalampattel
on 18 Feb 2017
Edited: Rahul Kalampattel
on 18 Feb 2017
You're overwriting the contents of B twice in each iteration of your for loop:
B = zeros(n,1); % preallocate, results output
B = [start1,stop1] %write to the matrix
The size of B is also changing each iteration since n is increasing, which defeats the purpose of preallocating memory.
Start by preallocating outside of the for loop, using the final dimensions you think the matrix will have. Inside the for loop, assign elements to a row/column of B. I'm guessing from your code that you want B to be a 25x2 matrix, in which case the following should work:
L = length(d);
B = zeros(L,2); % preallocate, results output
for n=1:L % d contains 25 elements
y=d{n}
z= strsplit(y,' ')
start=z{1}
stop=z{2}
start1 = str2num(start)
stop1 = str2num(stop)
B(i,:) = [start1,stop1] %write to the matrix
end
(Also your for loop is missing an 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!