【问题标题】:Calling data with using randi command in Matlab在 Matlab 中使用 randi 命令调用数据
【发布时间】:2019-02-05 04:30:05
【问题描述】:

我想通过使用'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) 给出的结果相同。 这个脚本有什么问题? 谢谢。

【问题讨论】:

  • 与 A(1)、B(1) 或 C(1) 给出的相同。顺便说一句,我再次编辑了问题主题。谢谢。
  • 你想做什么;尽管有可能,但您应该真正重新考虑您的方法。是什么让你走到了这一步?我希望这不是an XY problem(?) 我
  • 这个脚本有什么问题? randompick 是一个包含字符'A'(例如)的变量,但它不等于变量Arandompick 的第一个索引是 A,因此是您得到的结果
  • 好问题!当然,正如萨达尔所说。一种替代方法是不选择变量名称,而是选择一个索引,例如一个单元格数组,然后执行data{randompick}(1)

标签: matlab matrix random call


【解决方案1】:

这里的问题是你把代码数据混为一谈了。 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)

【讨论】:

    【解决方案2】:

    感谢您的 cmets 和回答。我现在看到了 bt 代码和数据的区别。 这也适用于我:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      相关资源
      最近更新 更多