How to Reshape a Data Array in MATLAB?

  • Context: MATLAB 
  • Thread starter Thread starter Saladsamurai
  • Start date Start date
  • Tags Tags
    Matlab
Click For Summary
SUMMARY

The discussion focuses on reshaping a single-column data array in MATLAB using the 'reshape' function. The user initially attempts to manually create a 2D array from a text file 'xburned.dat' containing data points in scientific notation. The proposed solution involves reading the data with 'dlmread', calculating the number of complete rows, and then applying 'reshape' to format the data into rows of five elements each. The final code snippet provided successfully implements this method, demonstrating a cleaner approach compared to the user's initial attempt.

PREREQUISITES
  • Familiarity with MATLAB programming
  • Understanding of the 'dlmread' function for reading data files
  • Knowledge of the 'reshape' function in MATLAB
  • Basic concepts of array manipulation in MATLAB
NEXT STEPS
  • Explore MATLAB's 'reshape' function documentation for advanced usage
  • Learn about data input/output functions in MATLAB, such as 'readmatrix' and 'csvread'
  • Investigate error handling in MATLAB to manage data inconsistencies
  • Practice creating multi-dimensional arrays from various data formats in MATLAB
USEFUL FOR

Data analysts, MATLAB programmers, and anyone working with numerical data manipulation in MATLAB will benefit from this discussion.

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: