我想在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
答案 0 :(得分:4)
这很简单。创建包含两个字符串的字符串单元格数组:Heads
和Tails
:
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
以获得所需内容。