在Matlab中使用randi命令调用数据

时间:2019-02-05 04:30:06

标签: matlab matrix random call

我想使用'randi'命令定义的字符串在矩阵中调用数据。

   A=[1 2]
   B=[2 3]
   C=[3 5]

   corners = 'ABC'
   randompick = corners(randi(numel(corners)))
   disp(randompick)
   randompick(1) 

我想以A矩阵为例

   1

因此,所需结果与A(1),B(1)或C(1)给出的结果相同。 这个脚本有什么问题? 谢谢。

2 个答案:

答案 0 :(得分:2)

这里的问题是您将 code data 混合在一起。 randompick包含数据,而A是变量名,代码。

有一种方法可以完全按照您的想法进行操作,其中涉及使用eval。完全不建议这样做,因为它会合并代码和数据。这导致了难以阅读和调试的复杂代码。不要做!幸运的是,还有其他选择。

一种简单的方法是将数据数组存储在更大的数组中,例如单元格数组:

data = { [1 2]
         [2 3]
         [3 5] };
randompick = randi(numel(data))
data{randompick}(1)

如果名称A / B / C很重要,那么您还有另一个理由要避免将其用作变量名。是数据!例如,考虑使用struct数组:

data = struct('name', {'A','B','C'}, ...
              'values', { [1 2]
                          [2 3]
                          [3 5] });
randompick = randi(numel(data))
disp(data(randompick).name)
data(randompick).values(1)

另一种方法是使用地图(也称为字典或哈希表):

data = containers.Map({'A','B','C'}, ...
                      { [1 2]
                        [2 3]
                        [3 5] });
corners = 'ABC'
randompick = corners(randi(numel(corners)))
disp(randompick)
data(randompick)

答案 1 :(得分:0)

谢谢您的评论和回答。我现在看到了bt代码和数据的区别。 这对我也有用:

Z = [A ; B ; C];
r=randi([1 3])
Z(r,1)