![](/img/trans.png)
[英]ERROR: LoadError: MethodError: no method matching Array(::Type{Int8}, ::Int64, ::Int64, ::Int64)
[英]Julia working with large arrays, is there any memory/speed advantage to using Int8 vs Int64?
Julia 1.5.3 on Ubuntu。我正在编写一个迭代 model,微观模拟的形式,并从 R 转换。随着人口的增长,数组大小可能会变得相当大,但都由整数和小整数组成。 在这种情况下,就 memory 或速度而言,使用 Int8 与在我看来是默认的 Int64 相比有什么优势吗?
有没有办法告诉 Julia,一些全局/通用设置可以更改为默认使用 Int8 而不是 Int64,除非另有指示?
遇到了我的第一个问题。 我有一个使用 Int8 值的 function,但是当我这样称呼它时:
Pop = InitialPop(StaNum, LayNum, MaxSts, MaxPar, MaxDay, MaxTrt)
我收到此错误:
ERROR: MethodError: no method matching InitialPop(::Int8, ::Int8, ....
这个 function 只是创建了一个初始的起始“种群”或生物体,所以我的问题是:
最欢迎阐明我逻辑中的明显缺陷。 谢谢。 杰
是的,对Int8
的操作会更快并且消耗更少 memory - Int8 占用 1 个字节的 RAM 而Int64
占用 8 个字节的 RAM(参见下面的基准测试)。 但是,对于 model 的元参数(例如人口规模),坚持使用Int64
是可以的。 它们只使用一次,可能不是您计算的核心部分。
考虑以下两个向量:
a = rand(Int8(0):Int8(127), 1000)
b = rand(0:127, 1000)
让我们看看从这些向量的每个元素中减去 5 需要多少时间和 memory:
julia> using BenchmarkTools
julia> @btime $a.-Int8(5);
118.053 ns (1 allocation: 1.06 KiB)
julia> @btime $b.-Int64(5);
581.959 ns (1 allocation: 7.94 KiB)
您可以看到加速是 4 倍,memory 消耗减少了 8 倍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.