创建一个随机True/False数组。

7

这是我目前正在做的事情:

a = trues(100)
for i in 1:length(a)
   a[i] = rand()>0.5 ? true : false
end

有更好(更快)的解决方案吗?

2个回答

12
在Julia 0.4中,您可以编写bitrand(100):
julia> bitrand(100)
100-element BitArray{1}:
  true
  true
 false
 false
  truetrue
 false
  true
  true
  true
您可以使用Julia旧版本中的Compat包获取此功能,或者您可以使用旧名称randbool(具有相同的行为但不同的名称)。Simon的rand(Bool,100)答案可行,但它会给出一个Array{Bool}而不是BitArray——一种特殊的数据类型,它仅使用每个布尔值一个位来紧凑地存储布尔数组。

1
这是新的0.4 API。您可以使用Compat.jl包在0.3上使用它 - 它以前的名称为randbool - mbauman
非常感谢!我写了 Pkg.update() 然后 using compat.jl,我收到了 Warning: requiring "compat" did not define a corresponding modulebitrand 未定义的警告。如果这不能很容易地解决,我想我会开一个新帖子。谢谢。 - Remi.b
Pkg.add("Compat") 然后 using Compat。一般在使用Julia软件包时,.jl后缀通常被省略。 - mbauman
谢谢,@MattB。- 答案已编辑,注明这是新名称并提到旧名称。 - StefanKarpinski
哦,是的,抱歉,我做了那个。我运行了 Pkg.add(""),然后收到了INFO: 没有要安装、更新或删除的软件包 INFO: 软件包数据库已更新的消息。然后我写了 using Compat(没有返回任何消息),但 bitrand 未定义。 - Remi.b
bitrand() 在 Julia 1.6+ 的 Random 包中吗? - PatrickT

4

我没有进行基准测试,但最快的选项似乎是:

a = rand(Bool,100,1)

要想了解更多关于多维数组的内容,请查看Julia文档页面底部的《多维数组》


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接