Julia 能否优化布尔数组以节省内存?

3
在 Julia 和其他我所知道的所有编程语言中,布尔值占用 8 位内存,否则它将无法在内存中寻址。例如:
x = true
println(sizeof(x)) # => 1

然而,当我创建一个布尔数组时,每个元素仍然占用整个字节:

x = [true, false, true, false, true, true, false, false]
println(sizeof(x)) # => 8

在其他语言(例如C++)中,一个包含8个布尔值的数组只需要占用1字节内存,因为每个布尔值只需要1位。是否可以让Julia也像这样优化布尔数组以便我可以节省内存?如果可以,该如何操作?

1个回答

5

是的,Julia可以优化布尔向量以节省内存。使用BitVector类型(和BitArray类型)。例如:

julia> bv = BitVector(rand(Bool, 1_000));

julia> size(bv)
(1000,)

julia> sizeof(bv)
128

所有标准的布尔运算都被支持。

文档链接:https://docs.julialang.org/en/v1/base/arrays/#Base.BitArray

在REPL中,?帮助模式也给出了BitVector的简短描述。

补充说明:DNF正确指出:

julia> using Random

julia> bv = bitrand(1_000);

创建随机位向量的高效方法。


3
这个是正确的,但你应该使用 bitrand(1_000) 而不是通过 BitVector(rand(Bool, 1_000)) 这种方式来绕路,因为后者会更慢,并且会创建一个不必要的大临时数组。 - DNF

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