Syed
Syed

Reputation: 1

How to convert matrix data into columns?

I have data of 100 x 101. I want to convert them in series e.g. for first row all column data then for 2nd row all column data and so on. It means the result will be three columns only. The first column with row numbers, the 2nd column with column numbers and the 3rd column with the value for that respective row and column.

Could you please help me doing this conversion in MATLAB.

Available data are in ASCII format and it is possible to open in both MATLAB and Excel.

Upvotes: 0

Views: 181

Answers (2)

R.Falque
R.Falque

Reputation: 944

You can use the ind2sub function that is faster and make more sense in this situation:

tic
A = rand(100,101);
[data(:,1), data(:,2), data(:,3)] = find(A);
data = sortrows(data,[1 2]);
toc

tic
B = A' ;
[data_B(:,1), data_B(:,2)] = ind2sub(size(B), 1:length(B(:)));
data_B(:,3) = B(:);
toc

The output for the timing is as follow:

Elapsed time is 0.002130 seconds (first method)

Elapsed time is 0.000525 seconds (second method).

Upvotes: 1

Adriaan
Adriaan

Reputation: 18187

This can be done by find:

A = rand(100,101);
[data(:,1), data(:,2), data(:,3)] = find(A);
data = sortrows(data,[1 2]);

Note that this is highly inefficient, as you are storing 3 values where you only need to store 1 (the element's actual value). For accessing a specific element, say row 31, column 43, you simply do A(31,43), where you index the matrix.

The file size of data is indeed three times larger than that of A:

whos
  Name          Size              Bytes  Class     Attributes

  A           100x101             80800  double              
  data      10100x3              242400  double              

Upvotes: 1

Related Questions