MATLAB How to Reshape a Data Array in MATLAB?

  • Thread starter Thread starter Saladsamurai
  • Start date Start date
  • Tags Tags
    Matlab
AI Thread Summary
The discussion revolves around processing a text file named 'xburned.dat' that contains a single column of scientific notation data points. The goal is to organize this data into an array where each row consists of five consecutive elements. The initial code provided by the user attempts to achieve this but fails to function correctly. Key points include the realization that if the total number of data points is not a multiple of five, the last row can be truncated to ensure it contains exactly five elements. The user explores using MATLAB's `reshape` function as a more efficient solution for this task. After some trial and error, the user acknowledges that the `reshape` approach is cleaner and ultimately successful in organizing the data as intended.
Saladsamurai
Messages
3,009
Reaction score
7
Ok. My brain is mush right now and I cannot seem to get this to work. I have a text file called 'xburned.dat' in the current directory that is a single column of data points that looks like this

Code:
9.91E-05
1.31E-04
1.38E-04
1.78E-04
2.31E-04
2.51E-04
2.81E-04
2.90E-04
3.01E-04
3.21E-04
3.41E-04
3.68E-04
4.57E-04
4.72E-04
5.01E-04
5.29E-04
5.56E-04
5.78E-04
5.85E-04
6.08E-04
6.21E-04
6.50E-04
6.68E-04
6.83E-04
7.10E-04
7.91E-04
8.30E-04
9.97E-04
1.13E-03
1.27E-03
.
.
.

I want to pick up the data in such a way that I have an array in which the rows are sets of 5 consecutive elements of xburned, i.e.:

Code:
9.91E-05 1.31E-04 1.38E-04 1.78E-04 2.31E-04
2.51E-04 2.81E-04 2.90E-04 3.01E-04 3.21E-04
.
.
.
I realize that there might not be a multiple of 5 of the data. In that case I can just truncate the data (i.e. just omit the last row that is < 5 points long).

This is my current code and it does not even come close ...

Code:
x_b = dlmread('xburned.dat');
len = length(x_b);
i = 1;
 while(i < len-5)
     k = 1;
     for j = 1:5
     points(k,j) = x_b(j,1);
     end
     i = i + 5;
     k = k + 1;
 end
 
Physics news on Phys.org
Last edited by a moderator:
MisterX said:
This could be done with http://www.mathworks.com/help/techdoc/ref/reshape.html". The following code is untested:

Code:
x_b = dlmread('xburned.dat');
n_rows = floor(size(x_b, 1)/5)); %number of rows in reshaped matrix
points = reshape(x_b(1:(n_rows*5)), n_rows, 5);

Thank you MisterX :smile: I will look into reshape. I got my code to work, but reshape looks much cleaner.
 
Last edited by a moderator:
Back
Top