在使用Matlab的命令兰迪数据调用

问题描述 投票:1回答:2

我想通过使用由“兰迪”命令定义的字符串来调用矩阵数据。

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

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

我想作为一个矩阵的例子:

   1

所以期望的结果是一样的什么A(1),B(1)或C(1)得到。什么是错的这个脚本?谢谢。

matlab matrix random call
2个回答
2
投票

这里的问题是,你混为一谈代码和数据。 randompick包含数据,和A是变量名,代码。

有一种方法可以做到你在想什么,以及涉及使用eval的。这是不推荐正是因为它合并了代码和数据。这导致复杂的代码难以阅读和难以调试。不这样做!幸运的是有替代品。

一个简单的方法是将数据数组存储在一个更大的阵列,例如一个单元阵列:

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

如果名称A / B / C是非常重要的,那么你有另一个原因,以避免使用作为变量名。它的数据!考虑,例如,使用结构数组:

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)

0
投票

谢谢你的评论和答复。我看到BT代码和数据的差异了。这也为我工作:

Z = [A ; B ; C];
r=randi([1 3])
Z(r,1)
© www.soinside.com 2019 - 2024. All rights reserved.