Creating a multidimensional table
显示 更早的评论
I'd like to create a multidimensional table. For example a 3D table with 10 stacked 3x3 matrices.
I tried with this code, but it doesn't work:
R = zeros(3,3,10);
T = table(R);
Thank you in advance.
8 个评论
Walter Roberson
2018-12-29
If you mean a table with 3 or more index positions, then that is not supported. Nested tables are supported though.
Gennaro Arguzzi
2018-12-30
Walter Roberson
2018-12-30
? That example just has a numeric array and a cell array
data = data_statics(:); label = label_statics(:);
table(data, 'rownames', label)
Gennaro Arguzzi
2018-12-30
Walter Roberson
2018-12-31
编辑:Walter Roberson
2018-12-31
T1 = table(data_statics);
T2 = table(label_statics);
T = table(T1,T2);
T =
1×2 table
T1 T2
data_statics label_statics
______________ _____________
[1x138 double] [1x138 cell]
But you might prefer
data_statics = data_statics(:);
label_statics = label_statics(:);
data_statics_table = table(data_statics);
label_statics_table = table(label_statics);
T = table(data_statics_table, label_statics_table);
It hardly seems worth putting each variable in its own table, though.
Gennaro Arguzzi
2018-12-31
编辑:Gennaro Arguzzi
2018-12-31
Benjamin Azrieli
2020-11-12
@WalterRobinson If I wanted to access a certain range in the double under one of the variables, how would I do so using your example? This page does not seems to help: https://www.mathworks.com/help/matlab/matlab_prog/access-data-in-a-table.html
Benjamin Azrieli
2020-11-12
In case anyone wants to know, I figured it out:
T.data_statistics(row #, n, m) , where n and m are the row and column dimensions, respectively, of the double under the variable name 'data_statistics'
回答(3 个)
per isakson
2018-12-29
With R2018b
>> R = zeros(3,3,10);
>> T = table(R);
>> T
T =
3×1 table
R
_______________
[1x3x10 double]
[1x3x10 double]
[1x3x10 double]
>>
What do you mean by "it doesn't work"
8 个评论
Gennaro Arguzzi
2018-12-30
per isakson
2018-12-30
编辑:per isakson
2018-12-30
"multidimensional table" in Matlab would be an array of tables, but that is not supported.
Matlab supports tables with tables as values of variables
>> T = table(T2,T3)
T =
3×2 table
T2 T3
____________ ____________
[1x10 table] [1x10 table]
[1x10 table] [1x10 table]
[1x10 table] [1x10 table]
and cell arrays of tables.
Gennaro Arguzzi
2018-12-30
per isakson
2018-12-30
编辑:per isakson
2018-12-30
I actually did download it, but failed to figure out how it supports your question. See Walters comment
per isakson
2018-12-30
编辑:per isakson
2018-12-31
I've deleted this comment because it contained too many mistakes on my part.
New try with R2018b
%%
T1 = table( ones(3,1) );
T2 = table( 2*ones(3,1) );
T = table( T1, T2 )
returns
T =
3×2 table
T1 T2
Var1 Var1
____ ____
1 2
1 2
1 2
Walter Roberson
2018-12-31
T2 = mergevars(___,'MergeAsTable',true) merges the specified variables into a table, instead of an array. The new table is itself a variable of the output table T2.
So, Yes, you can have tables as variables inside a table.
per isakson
2018-12-31
编辑:per isakson
2018-12-31
mergevars was "Introduced in R2018a."
I learn a lot tonight :)
Walter Roberson
2018-12-31
R2015b experiment:
>> load data_statics
>> T1 = table(data_statics);
T2 = table(label_statics);
T = table(T1,T2);
>> T
T =
T1 T2
___________ ___________
[1x1 table] [1x1 table]
Mike D.
2019-7-9
0 个投票
T = table(T1,T2,T3) only works if all three tables have exactly the same number of columns AND exactly the same number of rows, and all columns are the same data type. If I had a 1000 tables, it would be nice if Matlab could index them:
T(1) = T1;
T(2) = T2;
for i = 1:1000
T(i) = readtable(sprintf('file%d.dat', i), opts);
end
1 个评论
Walter Roberson
2019-7-9
Use cell array.
T = cell(1000,1);
T{1} = T1;
T{2} = T2;
for i = 1:1000
T{i} = readtable(sprintf('file%d.dat', i), opts);
end
Remember that for tables, the syntax T(i) is a shortcut for T{:,i} so for arrays of tables T(i) would be an ambiguous syntax unless arrays of tables were a different datatype.
Mike D.
2019-7-9
Works great, thanks. When I plot all thousand tables, each having thousands of rows and multiple columns, I couldn't do it with a one-liner such as:
plot(T{:}{:,1},T{:}{:,2})
Instead, I had to use a for-loop:
for i = 1 : numel(T)
plot(T{i}{:,1},T{i}{:,2})
plot(T{i}.Longitude, T{i}.Latitude)
end
But it works, thanks.
1 个评论
Walter Roberson
2019-7-9
You can use cellfun.
hold on
cellfun(@(t) plot(t.Longitude, t.Latitude), T);
类别
在 帮助中心 和 File Exchange 中查找有关 Multidimensional Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!