Info

This question is closed. Reopen it to edit or answer.

How to store a data by getting from for loop in matlab ?

1 view (last 30 days)
For example i'm getting value like this
a=[192.1225 60.2626 0.9993 100.3275];
for 'n' number of iteration, which means i will get so many values like
a=[192.1225 60.2626 0.9993 100.3275];
a=[20.1225 66.2626 1.0 10.8775];
a=[2.0925 64.2626 1.0 110.5475]; .....
it will continues like this and it will stop based on the 'for loop'
and now i want to store all the 'a' values in 'b' like this
b=[192.1225 60.2626 0.9993 100.3275
20.1225 66.2626 1.0 10.8775
2.0925 64.2626 1.0 110.5475];
and again the same value should display like this
p=[192.1225 60.2626 0.9993 100.3275];
q=[20.1225 66.2626 1.0 10.8775];
r=[2.0925 64.2626 1.0 110.5475]; .....

Answers (2)

Adam
Adam on 24 Nov 2014
If you know how many columns a is going to have and how many rows your final result will have (presumably you do if it is in a for loop) then you don't need the intermediate 'a' result at all.
Just pre-declare b as e.g
b = zeros( n, 4 );
for i = 1:n
b( i, : ) = yourCalculation();
end
where n is obviously however many rows you intends to have.
  9 Comments
Adam
Adam on 25 Nov 2014
Your
b( i, : ) = CH;
instruction appears to be in an inner loop defined by k and an outer loop defined by i. So you will lose all the results except the last one from your inner k-controlled loop and only store the last result for each iteration of the outer loop.
I would strongly advise factoring your code out into functions though to make it more readable as one huge file with loads of nested for loops and instructions is hard to understand
Stephen23
Stephen23 on 25 Nov 2014
+1 for starting the code with array-preallocation.

Orion
Orion on 24 Nov 2014
Edited: Orion on 24 Nov 2014
it's basic concatenation
b=[];
for i=1:n
% some calculation
a = % your new row vector
b=[b;a];
end
then you get a matrix b, and you just have to rerieve the line that interests you.
l = b(2,:);
...
  6 Comments
Orion
Orion on 24 Nov 2014
Edited: Orion on 24 Nov 2014
In your code, you put
b=[];
for i=1:n
% some calculation
a = CH;
b=[b;a];
b
end
You are concatenating n times a with himself in b. it's useless.
You need to add a new row in b, only if there is a new calculation.
See the 2 modif I made in attached file (search %# Modification).
b is initialized at the beginning, and increases only where a new CH is calculated.
I don't know if this is the result you want. bu this is the methid you need to do.
You just might change the condition for the concatenation (or the location in the code), but this only depends on what you want to do.
Matlab111
Matlab111 on 24 Nov 2014
ya. but sir, you just run the code once again and type capital 'X' in command window and similarly Capital 'Y' after executing that you will get the position on 'Cluster head (CH)' so at final i want only those values with energy and distance.
For example
CH=[164.9445 90.7746 0.9996 65.5964]
in this first two values represents 'X' and 'Y' and remaining are energy and distance.

Community Treasure Hunt

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

Start Hunting!