Creating a multidimensional table

112 ビュー (過去 30 日間)
Gennaro Arguzzi
Gennaro Arguzzi 2018 年 12 月 29 日
コメント済み: Benjamin Azrieli 2020 年 11 月 12 日
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 件のコメント
Benjamin Azrieli
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
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
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 件のコメント
per isakson
per isakson 2018 年 12 月 31 日
編集済み: per isakson 2018 年 12 月 31 日
mergevars was "Introduced in R2018a."
I learn a lot tonight :)
Walter Roberson
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.
Mike D. 2019 年 7 月 9 日
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
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.
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
Walter Roberson 2019 年 7 月 9 日
You can use cellfun.
hold on
cellfun(@(t) plot(t.Longitude, t.Latitude), T);

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMultidimensional Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by