将特定值分配给布尔数组

Assigning specific values to a boolean array

假设我正在抛一枚公平的硬币,其中 'tails' 的赋值为 x = -1/2,而 'heads' 的赋值为 x = 1/2。

我这样做了N次,我想求和。这是我试过的:

p = 0.5
N = 1e4

X(N,p)=(rand(N).<p)

我知道这不完整,但是当我检查 (rand(N).<p) 时,我看到一个由 true, false 组成的数组。我将其解释为 'Tails' 或 'Heads'。但是,我不知道如何将值 1/2 和 -1/2 分配给这些元素中的每一个,以便我找到总和。如果我简单地使用 sum((rand(N).<p)) 我会得到一个整数值,但我认为这不是正确的方法,因为我没有在任何地方指定值 1/2 和 -1/2。

非常感谢任何帮助。

如评论所述,您想做

sum(rand([-0.5, 0.5], N))

其中 N 必须是整数(您写的是 N=1e4,因此 typeof(N) == Float64rand 将不起作用)。

rand 的文档(由 ?rand 获得)描述了 rand(S, N) 的作用:

Pick a random element or array of random elements from the set of values specified by S

在这里,S 可以是一个可选的可索引 collection,在您的情况下是一个值数组(或像 Int 这样的类型)。所以,上面的 S = [-0.5, 0.5]rand 从这个 collection 中抽取了 N 个随机元素,我们可以在之后求和。

将特定值分配给布尔数组

因为这是你的问题的标题,而上面的答案实际上并没有解决这个问题,所以我也来评论一下。

你可以做 sum((rand(N).<p)-0.5),即将所有的 1 移到 0.5 并将所有的零移到 -0.5 以获得想要的结果。请注意,这是一个通用策略:假设您希望 trueafalseb,其中 ab是数字。您可以通过 (rand(N).<p)*(a-b) + b.

实现此目的

但是,除了"complicated",sum((rand(N).<p)-0.5)会分配临时数组,第一个是布尔值,然后是数字,最后一个是最终会进入 sum。由于这些不必要的分配,这种方法会比上面的解决方案慢。