将特定值分配给布尔数组
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) == Float64
和 rand
将不起作用)。
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
以获得想要的结果。请注意,这是一个通用策略:假设您希望 true
为 a
,false
为 b
,其中 a
和 b
是数字。您可以通过 (rand(N).<p)*(a-b) + b
.
实现此目的
但是,除了"complicated",sum((rand(N).<p)-0.5)
会分配临时数组,第一个是布尔值,然后是数字,最后一个是最终会进入 sum
。由于这些不必要的分配,这种方法会比上面的解决方案慢。
假设我正在抛一枚公平的硬币,其中 '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) == Float64
和 rand
将不起作用)。
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
以获得想要的结果。请注意,这是一个通用策略:假设您希望 true
为 a
,false
为 b
,其中 a
和 b
是数字。您可以通过 (rand(N).<p)*(a-b) + b
.
但是,除了"complicated",sum((rand(N).<p)-0.5)
会分配临时数组,第一个是布尔值,然后是数字,最后一个是最终会进入 sum
。由于这些不必要的分配,这种方法会比上面的解决方案慢。