Matlab 如何在不动态命名变量的情况下存储数据
我有40个变量。40个变量名称位于一个单元格数组(40 x 1)中 每个变量都有一个矩阵。矩阵为双矩阵,尺寸为5000 x 150。它还有一个大小为1 x 150的向量&最后一个向量为1 x 4 最初,我打算在单元格数组中用变量名动态命名每个结构。所以看起来像下面这样(假设变量名是ABC) 所有变量都将保存到一个目录中Matlab 如何在不动态命名变量的情况下存储数据,matlab,Matlab,我有40个变量。40个变量名称位于一个单元格数组(40 x 1)中 每个变量都有一个矩阵。矩阵为双矩阵,尺寸为5000 x 150。它还有一个大小为1 x 150的向量&最后一个向量为1 x 4 最初,我打算在单元格数组中用变量名动态命名每个结构。所以看起来像下面这样(假设变量名是ABC) 所有变量都将保存到一个目录中 然而,我读到使用eval不是一个很好的主意,所以猜测我的想法并不是解决这个问题的最佳方法。解决这个问题的最好办法是什么 您可以像@Shai和@RobertStettler建议的那
然而,我读到使用eval不是一个很好的主意,所以猜测我的想法并不是解决这个问题的最佳方法。解决这个问题的最好办法是什么 您可以像@Shai和@RobertStettler建议的那样,将
struct
数组与一起使用
但是,另一个选项是表
。如果您希望在一个大矩阵中查看数据,那么这可能更具吸引力,并且您也可以为每个表行指定变量的名称!请注意,表
中的行就是您所称的变量,但是MATLAB将表
列称为其变量
还要注意,使用表
可能比使用结构
或单元格
数组更困难,但如果您知道如何使用它们,您也可以处理表
例如:
% 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',:)
,为'b'
行上的所有数据返回一个表
T(:,2)
或T(:,'V')
,为所有行返回变量V
的表
T.V
或T{:,2}
或T{:,'V'}
或T.(2)
,返回所有行的矩阵V
。此语法类似于访问结构的(动态)字段名
T{3,1}
或T{c',1}
或T.M('c')
,为行'c'
返回单元格M
。此语法类似于访问单元格
,但具有更高级的可能性,即通过行或变量名访问表的能力
T{3,1}{:}
或T{c',1}{:}
或T.M{c'}
,返回单元格
内容M
行'c'
更复杂的是:T('a',:).M{:}
是访问行'a'
的M
的单元格内容的一种复杂方式,也可以使用T{1,1}{:}
或T.M{'a}
或T{'a','M}
或T.M}
来完成
在您的例子中,您将创建一个40x3表
,每一行您称之为变量,第一列为矩阵(在单元格
数组中),最后两列为向量(以及单元格
数组中或作为40xm双精度
,m
是向量的长度).为什么不使用结构数组?像ABC(i).dataMatrix
。不清楚为什么必须使用eval
。为什么不使用?
% 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