Mic*_* M. 3 memory arrays boolean julia
在 Julia 和我能想到的所有其他语言中,布尔值占用 8 位内存,否则它将无法在内存中寻址。例如:
x = true
println(sizeof(x)) # => 1
Run Code Online (Sandbox Code Playgroud)
但是,当我创建布尔数组时,每个元素仍然占用整个字节:
x = [true, false, true, false, true, true, false, false]
println(sizeof(x)) # => 8
Run Code Online (Sandbox Code Playgroud)
在其他语言中,例如 C++,八个布尔值的数组仅占用 1 个字节,因为每个布尔值实际上只需要 1 位。是否有可能让 Julia 也像这样优化布尔数组,以便我可以节省内存?如果是这样,怎么办?
是的,Julia 可以优化布尔向量的内存。使用 BitVector 类型(和 BitArray 类型)。例如:
julia> bv = BitVector(rand(Bool, 1_000));
julia> size(bv)
(1000,)
julia> sizeof(bv)
128
Run Code Online (Sandbox Code Playgroud)
支持所有标准布尔运算。
文档链接是:https://docs.julialang.org/en/v1/base/arrays/#Base.BitArray
?
REPL中的帮助模式也给出了关于BitVector的简短描述。
补充:DNF正确指出:
julia> using Random
julia> bv = bitrand(1_000);
Run Code Online (Sandbox Code Playgroud)
将是创建随机位向量的有效方法。