Multidimensional array to (multidimensional) table.

조회 수: 39(최근 30일)
Rodney McCabe
Rodney McCabe 2020년 5월 21일
댓글: Rodney McCabe 2020년 5월 26일
I have a 3D array from a Tiff image file. The 3 dimensions are (x,y,[R, G, D]), 500x500x3. The RGDs are unsigned integers. I would love to store more property data of different types (i.e double) at the x,y positions. It seems a 3D table could accomplish this, but it does not seem MATLAB has this functionality. Am I best served to have a bunch of 500x500xN arrays for each property/data type? Should I convert the 3D array (x,y,[R, G, D]) to a table with columns x, y, R, G, D, N, M ... It seems there are some operations that are easier to perform in a table than to multiple arrays, such as searching for values in one column and then performing operations on other columns.
If converting to a table seems like a good option, is there a fancy matrix/array method for doing this, instead of the only way I could figure out using embedded for loops like the following. RGB is the original 500x500x3 array. Sorry I do not know how to use this editor.
tiftable = zeros(size(RGB,1)*size(RGB,2),3); %this will be the new 250000x3 array of RGBs
for r = 1:size(RGB,1) % for all pixel rows
for c = 1:size(RGB,2) % for all pixel columns
tableline = tableline+1;
xpixel(tableline) = c;
ypixel(tableline) = r;
graintable = array2table([xpixel,ypixel,tiftable],'VariableNames',{'Xpixel','Ypixel','R_orig','G_orig','B_orig'});


Rajani Mishra
Rajani Mishra 2020년 5월 26일
array2table() function is used to covert a matrix to table, but it does not accepts 3-D matrix (image in this case) as an input arguement. So you can convert data (example image bands - R,G,B or any other property data) to a matrix where columns have required data and then use array2table for transforming to a table
Refer here for documentation of arra2table function :
  댓글 수: 1
Rodney McCabe
Rodney McCabe 2020년 5월 26일
Seems like it might be slighly more efficient, though it does not add the x and y positions(column and row) to the table. I think it would take at least as many steps to get the same table as above.
tableR = array2table(RGB(:,:,1),'VariableNames',{'R_orig'});
tableG = array2table(RGB(:,:,2),'VariableNames',{'G_orig'});
tableB = array2table(RBG(:,:,3),'VariableNames',{'B_orig'});
graintable = join(tableR, tableG, tableB];

댓글을 달려면 로그인하십시오.


Community Treasure Hunt

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

Start Hunting!

Translated by