Random Julia,生成四个整数的数组,整数在1:3之间,我需要一个包吗?

Random Julia,生成四个整数的数组,整数在1:3之间,我需要一个包吗?,random,integer,julia,Random,Integer,Julia,Ubuntu上的Julia 1.5.3。我试图简单地生成一个由四个整数组成的数组,整数的范围是1:3。尝试了一系列不同的语法,但只是出现了错误。我不能同时控制类型(Int8)和数字或返回值(4)。谢谢。J 最优雅、最高效的是: rand(UnitRange{Int8}(1,3), 4) 编辑 贝诺伊特·帕斯基尔指出,Int8(1):Int8(3),事实上他是对的。 这会产生更高效的汇编代码,因为编译器可以避免类型检查(当然,只有当1和3是具体值时) 以下是如何找到答案: julia> @

Ubuntu上的Julia 1.5.3。我试图简单地生成一个由四个整数组成的数组,整数的范围是1:3。尝试了一系列不同的语法,但只是出现了错误。我不能同时控制类型(Int8)和数字或返回值(4)。谢谢。J


最优雅、最高效的是:

rand(UnitRange{Int8}(1,3), 4)
编辑 贝诺伊特·帕斯基尔指出,
Int8(1):Int8(3)
,事实上他是对的。 这会产生更高效的汇编代码,因为编译器可以避免类型检查(当然,只有当
1
3
是具体值时)

以下是如何找到答案:

julia> @code_native (:)(Int8(1),Int8(3))
        .text
; ┌ @ range.jl:5 within `Colon'
        pushq   %rbp
        movq    %rsp, %rbp
        movl    %ecx, %eax
; │┌ @ range.jl:287 within `UnitRange'
; ││┌ @ range.jl:292 within `unitrange_last'
; │││┌ @ int.jl:86 within `-'
        leal    -1(%rax), %r8d
; │││└
; │││┌ @ operators.jl:352 within `>='
; ││││┌ @ int.jl:442 within `<='
        cmpb    %dl, %al
; │││└└
        movzbl  %dl, %ecx
        movzbl  %r8b, %edx
        cmovlel %ecx, %edx
; │└└
        popq    %rbp
        retq
        nopl    (%rax,%rax)
; └
julia>@code_native(:)(Int8(1),Int8(3))
.文本
; ┌ @ 范围.jl:5在“冒号”内
pushq%rbp
movq%rsp,%rbp
移动%ecx,%eax
; │┌ @ 范围:jl:287在“单位范围”内
; ││┌ @ 射程.jl:292在'unitrange\u last'范围内
; │││┌ @ int.jl:86在“-”之内
leal-1(%rax),%r8d
; │││└
; │││┌ @ operators.jl:352在“>=”内
; ││││┌ @ int.jl:442在“=”内

; │││┌ @ int.jl:442在`你想要
Int8.(1:3)
here.rand(Int8.(1:3),4)#中工作!你也可以在采样后转换你的整数:
Int8.(rand(1:3,4))
谢谢大家,我真的认为你应该把这些答案放在简短的回复中,而不是评论中,这样你才能得到你应得的荣誉。一句话的回答/回复也很好!这违反了一些礼节吗?你的答案可能很短,但在这个阶段,使用新语言时,网络上的内容很少,因此这些内容可能对其他人非常有用。另一条评论(对不起):我认为最好使用
rand(Int8(1):Int8(3),4)
。原因是
Int8.(1:3)
首先创建一个单位范围
Int64
,然后将其转换为
Vector{Int8}
,而
Int8(1):Int8(3)
直接创建一个非分配的
UnitRange{Int8}
。我想你的意思是
rand(UnitRange{Int8}(1,3),4)
(注意
8
)。当然可以,我的打字错误,谢谢!那兰德(Int8(1):Int8(3),4)
呢?@Benoit Pasquier是的,你是对的!
julia> @code_native (:)(Int8(1),Int8(3))
        .text
; ┌ @ range.jl:5 within `Colon'
        pushq   %rbp
        movq    %rsp, %rbp
        movl    %ecx, %eax
; │┌ @ range.jl:287 within `UnitRange'
; ││┌ @ range.jl:292 within `unitrange_last'
; │││┌ @ int.jl:86 within `-'
        leal    -1(%rax), %r8d
; │││└
; │││┌ @ operators.jl:352 within `>='
; ││││┌ @ int.jl:442 within `<='
        cmpb    %dl, %al
; │││└└
        movzbl  %dl, %ecx
        movzbl  %r8b, %edx
        cmovlel %ecx, %edx
; │└└
        popq    %rbp
        retq
        nopl    (%rax,%rax)
; └
julia> @code_native UnitRange{Int8}(1,3)                                   
        .text                                                              
; ┌ @ range.jl:287 within `UnitRange'                                      
        pushq   %rbp                                                       
        movq    %rsp, %rbp                                                 
        subq    $32, %rsp                                                  
        movq    %rcx, %rax                                                 
; │┌ @ number.jl:7 within `convert'                                        
; ││┌ @ boot.jl:749 within `Int8'                                          
; │││┌ @ boot.jl:639 within `toInt8'                                       
; ││││┌ @ boot.jl:624 within `checked_trunc_sint'                          
        movsbq  %al, %rcx                                                  
        cmpq    %rax, %rcx                                                 
        jne     L49                                                        
; │└└└└                                                                    
; │ @ boot.jl within `UnitRange'                                           
        movq    %rdx, %r8                                                  
; │ @ range.jl:287 within `UnitRange'                                      
; │┌ @ range.jl:292 within `unitrange_last'                                
; ││┌ @ int.jl:86 within `-'                                               
        leaq    -1(%rax), %rdx                                             
; ││└                                                                      
; ││┌ @ operators.jl:352 within `>='                                       
; │││┌ @ int.jl:442 within `<='                                            
        cmpq    %r8, %rax                                                  
; ││└└                                                                     
        cmovleq %r8, %rdx                                                  
; │└                                                                       
; │┌ @ number.jl:7 within `convert'                                        
; ││┌ @ boot.jl:749 within `Int8'                                          
; │││┌ @ boot.jl:639 within `toInt8'                                       
; ││││┌ @ boot.jl:624 within `checked_trunc_sint'                          
        movsbq  %dl, %rcx                                                  
        cmpq    %rdx, %rcx                                                 
        jne     L72                                                        
; │└└└└                                                                    
        addq    $32, %rsp                                                  
        popq    %rbp                                                       
        retq                                                               
; │┌ @ number.jl:7 within `convert'                                        
; ││┌ @ boot.jl:749 within `Int8'                                          
; │││┌ @ boot.jl:639 within `toInt8'                                       
; ││││┌ @ boot.jl:624 within `checked_trunc_sint'                          
L49:                                                                       
        movabsq $throw_inexacterror, %r8                                   
        movl    $243577088, %ecx                # imm = 0xE84B100          
        movq    %rax, %rdx                                                 
        callq   *%r8                                                       
        ud2                                                                
L72:                                                                       
        movabsq $throw_inexacterror, %rax                                  
        movl    $243577088, %ecx                # imm = 0xE84B100          
        callq   *%rax                                                      
        ud2                                                                
        nopl    (%rax,%rax)                                                
; └└└└└