在 Matlab 中使用 randi 命令调用数据
Calling data with using randi command in Matlab
我想通过'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) 给出的结果相同。
这个脚本有什么问题?
谢谢
这里的问题是您混淆了 code 和 data。 randompick
包含数据,A
是变量名,code.
有一种方法可以完全按照您的想法进行操作,这涉及使用 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)
另一种方法是使用映射(也称为字典或散列 table):
data = containers.Map({'A','B','C'}, ...
{ [1 2]
[2 3]
[3 5] });
corners = 'ABC'
randompick = corners(randi(numel(corners)))
disp(randompick)
data(randompick)
感谢您的评论和回答。我现在看到了 bt 代码和数据的区别。
这也适用于我:
Z = [A ; B ; C];
r=randi([1 3])
Z(r,1)
我想通过'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) 给出的结果相同。 这个脚本有什么问题? 谢谢
这里的问题是您混淆了 code 和 data。 randompick
包含数据,A
是变量名,code.
有一种方法可以完全按照您的想法进行操作,这涉及使用 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)
另一种方法是使用映射(也称为字典或散列 table):
data = containers.Map({'A','B','C'}, ...
{ [1 2]
[2 3]
[3 5] });
corners = 'ABC'
randompick = corners(randi(numel(corners)))
disp(randompick)
data(randompick)
感谢您的评论和回答。我现在看到了 bt 代码和数据的区别。 这也适用于我:
Z = [A ; B ; C];
r=randi([1 3])
Z(r,1)