如何将rand()函数的结果赋值为(H,T)而不是(0,1)

时间:2015-03-09 18:44:46

标签: matlab

我想在rand()函数的帮助下生成n次试验的抛掷结果序列。我从MATLAB参考代码中读到了rand()rand()生成0和1或指定范围内的随机数,我怎样才能使rand()的结果变为H和T--代表head和tail-? / p>

示例代码,设1为H,0为T:

n = 10;
x = rand(1,n)<0.5;
t = 1:10;
plot(t,x);
title('outcomes of tossing a coin 10 times');
xlabel('trials');
ylabel('outcome');
axis([1 10 0 1.2]);
display(x);

命令窗口

x =

  1     0     1     0     0     0     1     1     1     0

enter image description here

1 个答案:

答案 0 :(得分:4)

这很简单。创建包含两个字符串的字符串单元格数组:HeadsTails

outcome = {'Heads', 'Tails'};

接下来,您可以像以前一样使用rand,但随后将其转换为double并添加1,以便获得1和2的值。您需要这个的原因是因为您可以使用此输出索引到outcome,因为MATLAB开始访问索引1处的值。但是,如果您创建logical rand(1,n) < 0.5向量,则向此结果添加1,输出无论如何都将合并为double,因此您将隐式地投射结果。

然后,您可以使用它来索引outcome以获得所需的结果。在我的最后重现:

%// Set seed for reproducibility
rng(123123);
x = rand(10,1) < 0.5; %// Generate random vector of logical 0s and 1s

%// Cast to double then add with 1 so we can generate a vector of 1s and 2s
x = x + 1;

%// Declare that cell array of strings
outcome = {'Heads', 'Tails'};

%// Use the vector of 1s and 2s to get our desired strings
y = outcome(x)

......我们得到:

y = 

  Columns 1 through 7

    'Tails'    'Heads'    'Tails'    'Heads'    'Heads'    'Tails'    'Tails'

  Columns 8 through 10

    'Tails'    'Heads'    'Tails'

请注意,y将是字符串的单元格数组,因此,如果要访问特定字符串,请执行以下操作:

str = y{idx};

idx是您要访问的位置。


但是,如果我可以推荐其他内容,您可以尝试使用randi并指定要生成的最大值为2.这样,您可以保证生成介于1和2之间的值这样:

x = randi(2, 10, 1);

这将生成10 x 1值为1或2的数组。对我来说,这看起来更具可读性,但无论你喜欢什么。然后,您可以使用此结果并直接访问outcome以获得所需内容。