我有40个变量。 40个变量名称位于单元格数组中(40 x 1)。
每个变量都有一个矩阵。矩阵的类型为double,尺寸为5000 x 150.它还有一个尺寸为1 x 150&的矢量。最后一个向量1 x 4。
最初,我将在单元格数组中使用其变量名称动态命名每个结构。所以看起来像下面的东西(假设变量名称是ABC),
<div style="text-align:center">...</div>
所有变量都将保存到目录中。
但是我读过使用eval并不是一个好主意,所以猜测我的想法并不是解决这个问题的最佳方法。什么是解决这个问题的最佳方法?
答案 0 :(得分:0)
您可以将struct
数组与dynamic field names一起使用,如@Shai和@RobertStettler所示。
但是,另一个选项是table
。如果您想在一个大矩阵中查看数据,这可能会更有吸引力,并且您也可以为每个table
行提供变量的名称!请注意,table
中的行将是您所谓的变量,但MATLAB会将table
列调用为变量。
另请注意,使用table
可能比使用struct
或cell
数组更难,但如果您知道如何使用它们,则可以处理table
太
一个例子:
% create dummy data
rowNames = {'a';'b';'c'};
M = {ones(3); zeros(3); nan(3)}; % a cell, one element per item in rowNames
V = [1 2; 3 4; 5 6]; % a matrix of vectors, each row containing a vector for every item in rowNames
% create a table
T = table(M,V,'RowNames',rowNames); % this is where your variable names could go
现在,要访问您可以使用的数据(一些示例):
T(2,:)
或T('b',:)
,为table
行的所有数据返回'b'
。T(:,2)
或T(:,'V')
,为所有行返回table
变量V
。T.V
或T{:,2}
或T{:,'V'}
或T.(2)
,为所有行返回矩阵V
。此语法类似于访问struct
。T{3,1}
或T{'c',1}
或T.M('c')
,为行cell
返回M
'c'
。此语法类似于访问cell
,但具有更高级的可能性,即通过行或变量名访问表的能力。T{3,1}{:}
或T{'c',1}{:}
或T.M{'c'}
,为行cell
返回M
内容'c'
。更复杂:T('a',:).M{:}
是访问行M
'a'
的单元格内容的复杂方式,可以使用T{1,1}{:}
或{{1}来完成}}或T.M{'a'}
或T{'a','M'}{:}
。
在你的情况下,你会得到一个T.M{1}
,每一行你称之为变量,第一列是矩阵(在40x3 table
数组中),最后两列是向量(以及cell
数组或cell
,40xm double
是向量的长度。)