在单元格数组中调用工作空间变量

时间:2016-01-27 23:40:08

标签: matlab

假设我在工作空间中存储了三个变量,如下面的

a = [1 2 4 8]
b = [4 9 3 8]
c = [8 6 4 2]

我想创建一个单元格数组并使用who命令将其存储在x中,如

x = who

现在新的单元格数组存储为x,其中包含{' a' ' B' ' C' }

但是如何调用存储在a中的变量值 像x {1}一样给我回报价值' a'我想得到

[1 2 4 8]

结果

由于

2 个答案:

答案 0 :(得分:2)

评论你应该以不同的方式开始评论。使用带输出参数的load!

data=load(...)

这样,所有数据都存储在一个名为data的结构中,字段名称为b和c。现在继续您的代码:

%replacement for who, returning all field names
x=fieldnames(data)
%access first field using dynamic field names
data.(x{1})

答案 1 :(得分:0)

正如@JohnHascall,@ MatthiasW和@AndrasDeak对your previous question的评论中提到的那样,x = who会以单元格数组的形式返回变量列表。可以有许多不同的方法来记录这些变量的值。我建议利用x的元素是字符串的事实,因此我们可以通过在循环中使用eval来访问变量的值:

x = who;
for ii = 1:numel(x)
    y{ii} = eval(x{ii});
end

循环内的语句会创建另一个单元格数组,并记录相应变量的值。所以,你最终会得到这样的东西:

x = 

    'a'
    'b'
    'c'
    'd'
    'e'
y = 

[5]    'Hello'    [1x100 double]    [14x14 double]    [512x512x3 uint8]

因此,假设您现在希望访问b(3)。你会这样做:

y{2}(3)

ans =

    l

很奇怪,但无论如何都有效。