删除Julia中的连续重复项

Sam*_*ssi 8 arrays duplicates julia

我是朱莉娅的新手,我不知道如何删除数组中的连续重复项.例如,如果您采用此数组:

   `v=[8,8,8,9,5,5,8,8,1];`
Run Code Online (Sandbox Code Playgroud)

我想获得向量v1,使得:

v1 = [8,9,5,8,1];

谁能帮助我?非常感谢.

Dan*_*etz 8

一种方法可以是定义:

function fastuniq(v)
  v1 = Vector{eltype(v)}()
  if length(v)>0
    laste = v[1]
    push!(v1,laste)
    for e in v
      if e != laste
        laste = e
        push!(v1,laste)
      end
    end
  end
  return v1
end
Run Code Online (Sandbox Code Playgroud)

使用此功能,您可以:

julia> println(fastuniq(v))
[8,9,5,8,1]
Run Code Online (Sandbox Code Playgroud)

但是,在处理数组时,需要确定元素是深层还是浅层复制.在整数的情况下,没关系.


Nea*_*ltz 7

StatsBase.jl这里有一个rle函数(运行长度编码).

  • 好的解决方案 它还发现了`rle`中的潜在错误:空向量产生异常(在访问第一个元素之前没有检查). (2认同)

nic*_*y12 5

这比@DanGetz的功能慢很多,但这是一种方法:

function notsofastunique(v)
  return [v[1]; v[2:end][v[2:end] .!= v[1:end-1]]]
end


>println(notsofastunique(v))
[8,9,5,8,1]
Run Code Online (Sandbox Code Playgroud)

也许这对寻找一个软件解决方案的人来说很有用.