小编Mar*_*tle的帖子

Julia中的一个简单的'if'语句将我的主筛的运行时间增加了15倍 - 为什么?

我一直在朱莉娅试验各种主要的筛子,以期找到最快的.这是我最简单的,如果不是我最快的话,它在我的1.80 GHz处理器上运行大约5-6 ms,n = 100万.但是,当我添加一个简单的"if"语句来处理n <= 1或s(起始编号)> n的情况时,运行时间增加15倍到大约80-90 ms.

using BenchmarkTools

function get_primes_1(n::Int64, s::Int64=2)::Vector{Int64}
    #=if n <= 1 || s > n
        return []
    end=#
    sieve = fill(true, n)
    for i = 3:2:isqrt(n) + 1
        if sieve[i]
            for j = i ^ 2:i:n
                sieve[j]= false
            end
        end
    end
    pl = [i for i in s - s % 2 + 1:2:n if sieve[i]]
    return s == 2 ? unshift!(pl, 2) : pl
end

@btime get_primes_1(1_000_000)
Run Code Online (Sandbox Code Playgroud)

如上所述注释掉'if'语句的输出是:

5.752 ms (25 allocations: …
Run Code Online (Sandbox Code Playgroud)

if-statement runtime julia

2
推荐指数
1
解决办法
89
查看次数

在 Julia 中将函数参数更改为关键字似乎会引入类型不稳定

我有一个程序,其中该main()函数采用四个参数。当我运行@code_warntype该功能时,似乎没有什么不妥。所有变量都有指定的类型,并且没有实例UNION或其他明显的警告标志。

抱歉,该程序相当长,但我不确定如何在保留问题的同时缩短它:

function main(n::Int, dice::Int=6, start::Int=1, modal::Int=3) ::Tuple{String, Vector{String}, Vector{Float64}}
    board = String["GO", "A1", "CC1", "A2", "T1", "R1", "B1", "CH1", "B2", "B3",
        "JAIL", "C1", "U1", "C2", "C3", "R2", "D1", "CC2", "D2", "D3",
        "FP", "E1", "CH2", "E2", "E3", "R3", "F1", "F2", "U2", "F3",
        "G2J", "G1", "G2", "CC3", "G3", "R4", "CH3", "H1", "T2", "H2"]
    cc_cards = shuffle(collect(1:16))
    ch_cards = shuffle(collect(1:16))
    function take_cc_card(square::Int, cards::Vector{Int})::Tuple{Int, Vector{Int}}
        if cards[1] == 1
            square = findfirst(board, "GO")
        elseif cards[1] == 2 …
Run Code Online (Sandbox Code Playgroud)

keyword-argument julia type-stability

2
推荐指数
1
解决办法
252
查看次数

在Julia中按多个元素对矢量矢量进行排序

我已经很好地阅读了Julia手册中的"排序功能"部分,并看了一下在这个板上已经提出的一些类似问题,但我认为我没有找到答案我的问题.抱歉,如果我错过了什么.

基本上我有一个向量向量,包含整数的向量.出于示例的目的,每个封闭的向量包含3个整数,但它可以是任何数字.我想通过第一个元素,然后是第二个元素,然后是第三个元素等对封闭的向量进行排序.

让我们从向量开始:

v = [[3, 6, 1], [2, 2, 6], [1, 5, 9], [2, 1, 8], [3, 7, 9],
    [1, 1, 2], [2, 2, 2], [3, 6, 2], [1, 2, 5], [1, 5, 6],
    [3, 7, 4], [2, 1, 4], [2, 2, 1], [3, 1, 2], [1, 2, 8]]
Run Code Online (Sandbox Code Playgroud)

继续我正在寻找的东西:

v = [[1, 1, 2], [1, 2, 5], [1, 2, 8], [1, 5, 6], [1, 5, 9], 
    [2, 1, 4], [2, 1, 8], [2, 2, 1], [2, 2, 2], …
Run Code Online (Sandbox Code Playgroud)

sorting vector julia

1
推荐指数
1
解决办法
98
查看次数