假设我扔了一个公平的硬币,其中'尾巴'被赋值为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。
非常感谢任何帮助。
答案 0 :(得分:3)
如评论所示,您想要
sum(rand([-0.5, 0.5], N))
其中N
必须是整数(您编写了N=1e4
,因此typeof(N) == Float64
和rand
将无效。
rand
的文档(由?rand
获取)描述了rand(S, N)
的作用:
从中选择随机元素或随机元素数组
指定的值S
这里,S
可以是可选的可索引集合,在您的情况下是一个值数组(或类似Int
的类型)。因此,上面S = [-0.5, 0.5]
和rand
会从此集合中抽取N
个随机元素,我们可以在此总结。
将特定值分配给布尔数组
由于这是您问题的标题,而上述答案实际上并未解决此问题,因此我也要对此发表评论。
你可以sum((rand(N).<p)-0.5)
,即你将所有的0.5
和所有零都移到-0.5
以获得想要的结果。请注意,这是一般策略:假设您希望true
为a
而false
为b
,其中a
和b
是数字。您可以通过(rand(N).<p)*(a-b) + b
实现此目的。
然而,除了更“复杂”之外,sum((rand(N).<p)-0.5)
将分配临时数组,首先是布尔值,然后是数字之一,后者最终会进入{{1 }}。由于这些不必要的分配,这种方法将比上述解决方案慢。