如何在不动态命名变量的情况下存储数据

时间:2016-02-16 12:18:42

标签: matlab

我有40个变量。 40个变量名称位于单元格数组中(40 x 1)。

每个变量都有一个矩阵。矩阵的类型为double,尺寸为5000 x 150.它还有一个尺寸为1 x 150&的矢量。最后一个向量1 x 4。

最初,我将在单元格数组中使用其变量名称动态命名每个结构。所以看起来像下面的东西(假设变量名称是ABC),

<div style="text-align:center">...</div>

所有变量都将保存到目录中。

但是我读过使用eval并不是一个好主意,所以猜测我的想法并不是解决这个问题的最佳方法。什么是解决这个问题的最佳方法?

1 个答案:

答案 0 :(得分:0)

您可以将struct数组与dynamic field names一起使用,如@Shai和@RobertStettler所示。

但是,另一个选项是table。如果您想在一个大矩阵中查看数据,这可能会更有吸引力,并且您也可以为每个table行提供变量的名称!请注意,table中的行将是您所谓的变量,但MATLAB会将table列调用为变量。

另请注意,使用table可能比使用structcell数组更难,但如果您知道如何使用它们,则可以处理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.VT{:,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数组或cell40xm double是向量的长度。)