Clear Filters
Clear Filters

convert the table to matrix

58 views (last 30 days)
Mario
Mario on 5 Dec 2023
Answered: Walter Roberson on 5 Dec 2023
Hi,
I used the below command and it read the dat files as a table (1x1500 cell) and each cell include (65536x4 table)
for k = 1:1500
myfilename = sprintf('Vec%05d.dat', k);
mydata{k} = readtable(myfilename);
end
then I tried to convert the table to matrix, but it doesn't work, could you please correct it to me?
for k = 1:1500
mydata1(:,:,k)= table2array(mydata{:,k})
end
my aim is to get a matrix of mydata1 with size 256x256x1500
thanks in advance
  3 Comments
Walter Roberson
Walter Roberson on 5 Dec 2023
Do you need the intermediate tables to be stored for some reason, or do you just need the final array?
Is there a reason you are using readtable() instead of readmatrix() ?
Mohamed
Mohamed on 5 Dec 2023
No I don't want to store the tables , I need the final array

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 5 Dec 2023
N = 1500;
%we proceed in two steps.
%we read one array
for k = 1
myfilename = sprintf('Vec%05d.dat', k);
mydata1 = readmatrix(myfilename);
end
%and that tells us how much data is in each file.
%Now we extend array efficiently. Doing a single
%array extension like this is a heck of a lot faster
%than growing the array each iteration
mydata1(end,end,N) = 0;
%now read the rest of the files
for k = 2:N
myfilename = sprintf('Vec%05d.dat', k);
thisdata = readmatrix(myfilename);
mydata1(:,:,k) = thisdata;
end
%we have all of the data
%reshape it.
%we assume 256 rows but we do not assume columns
mydata1 = reshape(mydata1, 256, [], size(mydat1,2), size(mydata1,3));

More Answers (1)

Sulaymon Eshkabilov
Sulaymon Eshkabilov on 5 Dec 2023
I believe as Madhan pinpointed that you data size should be 256x256x4x1500. Here is the final code:
for k = 1:1500
myfilename = sprintf('Vec%05d.dat', k);
mydata{k} = readtable(myfilename);
mydata1(:,:,k)= table2array(mydata{:,k})
end
%% Final conversion after collecting all data from the files into an ARRAY
MY_data_OK = reshape(MY_data, [256, 256, 4, 1500]);
  1 Comment
Mohamed
Mohamed on 5 Dec 2023
Actually, I am not sure that: mydata1(:,:,k)=table2array(mydata{:,k})
This command worked for a day without stopping. So I could you please tell me where is the mistake because I think it is just a loop

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!