代码之家  ›  专栏  ›  技术社区  ›  Andrew Bannerman

使用运算符进行布尔匹配(&O)

  •  2
  • Andrew Bannerman  · 技术社区  · 7 年前

    好吧,我们在这里采用这种逻辑:

    dummy = [1 2 3 4 5]
    num_test = convert(Array{Int64},3 .== dummy)
    

    我得到的结果是:

    0  0  1  0  0
    

    如果我尝试匹配两个语句:

    num_test = convert(Array{Int64},3 .== dummy & 4 .== dummy)
    

    它不评估:

    0  0  0  0  0
    

    当我写这篇文章时,这是因为 .== 矢量调用其查找 3 & 4 在同一索引元素位置上?

    我可以在R中执行类似的操作。但相同类型的逻辑不会转移到Julia,或者我使用了错误的语法Julia?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  3
  •   Colin T Bowers    7 年前

    我假设您尝试执行的操作是评估 3 .== dummy 4 .== dummy ,然后比较这两个元素。鉴于此,这里有两个问题:

    1) 操作顺序。你需要 (3 .== dummy) & (4 .== dummy)

    2) 如果您使用的是最近的v0。6,您还应该看到一个弃用警告,因为来自v0。7+,您需要广播 & 操作人员So使用 (3 .== dummy) .& (4 .== dummy)

    据我所知 Vector{Int} 这个部分很好,应该按预期工作,尽管您可以只写 Int.((3 .== dummy) .& (4 .== dummy))

    鉴于以上所有情况,您现在应该看到以下结果:

    julia> Int.((3 .== dummy) .& (4 .== dummy))
    1×5 Array{Int64,2}:
     0  0  0  0  0
    
    julia> Int.((3 .== dummy) .| (4 .== dummy))
    1×5 Array{Int64,2}:
     0  0  1  1  0
    

    最后一点,我想你是故意定义的 dummy 成为一行 Matrix 而不是 Vector .如果您希望最终输出为 矢量 ,则您可以使用 dummy = [1,2,3,4,5]