【问题标题】:Index Array without Elements没有元素的索引数组
【发布时间】:2020-10-10 12:59:40
【问题描述】:

我有一个向量

a = Vector(1:4)

[1, 2, 3, 4]

我想将它索引到所有元素第三个得到

[1, 2, 4]

R 你可以做a[-3]。你在Julia做什么?

(最终我想遍历所有元素并将它们与其余元素进行比较 - 也许这是相关的。)

【问题讨论】:

  • 关于你的括号,你可以像这样[(a[i], a[j]) for i in eachindex(a), j in eachindex(a) if j ≠ i]

标签: julia


【解决方案1】:

此用例很常见,包含在InvertedIndices.jl 包中。如果你安装它,那么你可以运行:

julia> using InvertedIndices

julia> a = 1:4
1:4

julia> a[Not(3)]
3-element Array{Int64,1}:
 1
 2
 4

还有一些包(比如 DataFrames.jl)会自动加载这个包(例如,如果您使用 DataFrames.jl,则不必单独安装和加载 InvertedIndices.jl)。

【讨论】:

    【解决方案2】:

    不幸的是,Julia 的语法比 R 的更冗长:

    julia> a[1:end .!== 3]
    3-element Array{Int64,1}:
     1
     2
     4
    

    另一种选择是改变 a:

    julia> deleteat!(a,3)
    3-element Array{Int64,1}:
     1
     2
     4
    

    如果您的数据在 DataFrame 内,您可以获得更好的语法:

    julia> df = DataFrame(a=1:4);
    
    julia> df[Not(3),:]
    3×1 DataFrame
    │ Row │ a     │
    │     │ Int64 │
    ├─────┼───────┤
    │ 1   │ 1     │
    │ 2   │ 2     │
    │ 3   │ 4     │
    

    DataFrames 被导入时,Not 也可以与 Vector 一起使用:

    julia> a[Not(3)]
    3-element Array{Int64,1}:
     1
     2
     4
    

    【讨论】:

      【解决方案3】:

      没见过

      julia> a[1:end .≠ 3]
      3-element Array{Int64,1}:
       1
       2
       4
      

      julia> a[eachindex(a) .≠ 3]
      3-element Array{Int64,1}:
       1
       2
       4
      

      提到,但也许有充分的理由?


      编辑:我错了,除了!==被替换为之外,第一个实际上与Bogumil的第一个答案相同

      【讨论】:

      • 如果 a 很大,效率会非常低
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 2016-02-12
      • 2019-06-26
      • 2019-07-12
      相关资源
      最近更新 更多